2009-05-19 29 views
7

Tôi đang làm việc trên một thứ gì đó giống như mạng lưới mạng xã hội; Tôi đang sử dụng các API khác nhau từ các trang web khác nhau, ví dụ: Last.FM, Delicious, Twitter, ...Sử dụng nhiều bộ điều khiển trong một chế độ xem trong Rails

Tôi đã tạo một bộ điều khiển cho mỗi trang web (hiện tại, có 7).

xem mẫu:

localhost:3000/lastfm <- All datas i gathered from user's Last.fm account 
localhost:3000/twitter <- All datas i gathered from user's Twitter account 
... 

Bây giờ tôi muốn thể hiện những dữ liệu ngay trong một giao diện (localhost: 3000/index.hmtl) bằng cách sử dụng các bộ điều khiển khác nhau.

Các thành phần được phản đối, tạo ra một bộ điều khiển và chôn tất cả các API trong đó có vẻ xấu xí, quá ..

Vì vậy, tôi không biết làm thế nào để làm điều này. Bất kỳ ý tưởng?

Trả lời

8

Trước hết, bạn nên đặt tất cả các phương pháp lưu trữ dữ liệu và thu thập dữ liệu vào Tài nguyên và Mô hình để chúng có thể truy cập được từ tất cả các trình điều khiển. Bạn có thể giữ các hoạt động đột biến dữ liệu nội bộ trong các bộ điều khiển riêng của bạn. Một khi bạn có nó tổ chức như thế này, bạn có thể làm những gì Hobo làm: tạo ra một bộ điều khiển chỉ cho trang đầu, "front_controller" nếu bạn sẽ. Ở đây bạn có thể hiển thị dữ liệu được thu thập từ tất cả các mô hình và tài nguyên của bạn, cũng như các liên kết đến các hành động điều khiển khác của bạn.

Đây là một số ít interestingthoughts để tổ chức tốt hơn mô hình và bộ điều khiển của bạn (mô hình chất béo, bộ điều khiển gầy gò là một nguyên tắc nhỏ) Do bạn đang sử dụng các API khác (như lastfm và twitter), bạn có thể muốn thực hiện xem this railscasts về việc tạo mô hình không ActiveRecord (mô hình không được gắn với cơ sở dữ liệu)

đây là một số mã giả, hãy nhớ rằng nó chỉ được nhắm mục tiêu thực sự vào câu hỏi của bạn.

# pseudo code 

    class TwitterController < ApplicationController 
    def index 
     @services = { 
     :twitter => TwitterModel.find(:all, ...), 
     } 
    end 
    def update_twitter 
     TwitterUpdaterClass.update { |twit| 
     _m = TwitterModel.new 
     _m.message = twit.msg 
     _m.from = twit.from 
     # .. 
     _m.save 
     } 
    end 
    end 


    class MyIndexController < ApplicationController 
    def index 
     @services = { 
     :twitter => TwitterModel.find(:all, ...), 
     :lastfm => LastFmModel.find(:all, ...) 
     } 
    end 
    end 

có thể là tốt hơn nhiều có background-công nhân cập nhật của bạn nghỉ ngơi-dịch vụ thay vì một bộ điều khiển mà bạn cần để gọi mỗi khi bạn muốn lấy tweets gần đây. đây là bài viết hay hiển thị - 6 ways to run background jobs in rubyonrails

# more pseudo code 

    class TwitterWorker < BackgrounDRb::MetaWorker 
    set_worker_name :twitter_worker 
    def create(args = nil) # instead of TwitterController.update_twitter 
     TwitterUpdaterClass.update { |twit| 
     _m = TwitterModel.new 
     _m.message = twit.msg 
     _m.from = twit.from 
     # .. 
     _m.save 
     } 
    end 
    end 
+1

GJ ganking văn bản chính xác của tôi: P –

+1

(Mặc dù câu trả lời này sao chép văn bản của hai câu trả lời khác, tôi đang bình luận ở đây vì đây là câu trả lời được chấp nhận.) Thay vì tạo mô hình không phải ActiveRecord, bạn có thể ngày nay sử dụng [ActiveModel] (https://github.com/rails/rails/tree/master/activemodel), "cung cấp một bộ giao diện đã biết để sử dụng trong các lớp mô hình. Chúng cho phép người trợ giúp Gói Hành động tương tác với không hoạt động Ví dụ, ghi lại các mô hình. " –

6

Trước hết, bạn nên đặt tất cả các phương pháp lưu trữ dữ liệu và thu thập dữ liệu vào Tài nguyên và Mô hình để chúng có thể truy cập được từ tất cả các trình điều khiển. Bạn có thể giữ các hoạt động đột biến dữ liệu nội bộ trong các bộ điều khiển riêng của bạn. Một khi bạn có nó tổ chức như thế này, bạn có thể làm những gì Hobo làm: tạo ra một bộ điều khiển chỉ cho trang đầu, "front_controller" nếu bạn sẽ. Ở đây bạn có thể hiển thị dữ liệu được thu thập từ tất cả các mô hình và tài nguyên của bạn, cũng như các liên kết đến các hành động điều khiển khác của bạn.

+1

Điều này. Đặt bộ sưu tập dữ liệu của bạn thành các mô hình. Tìm kiếm trên Twitter? Đó là một odel. Cạo Last.fm? Đó là một mô hình. Bộ điều khiển dành cho khách hàng để nói chuyện với * bạn * - họ xử lý các yêu cầu. –

4

Tôi nghĩ bạn nên đọc một chút về đường ray 'MVC architecture. Dường như với tôi rằng bạn đang bỏ qua phần M (odel) của nó. Các mô hình nên giữ dữ liệu, do đó là phần quan trọng nhất trong ứng dụng của bạn.
Đây là một số ít là interestingthoughts để tổ chức tốt hơn mô hình và bộ điều khiển của bạn (mô hình chất béo, bộ điều khiển gầy, là một quy tắc chung. xem this railscast về cách tạo mô hình không ActiveRecord (mô hình không được gắn với cơ sở dữ liệu)

Nếu bạn cung cấp API cho người dùng của mình, tôi khuyên bạn nên sử dụng phương pháp RESTful, vì thực sự có thể dễ dàng phát triển và duy trì
Bạn nên đọc thêm về resources, vì số localhost/lastfmlocalhost/twitter của bạn là tài nguyên và không phải lượt xem.

Hy vọng điều này sẽ hữu ích. Chúc may mắn

Các vấn đề liên quan