在Rails中的一个视图中使用多个控制器

我正在研究类似社交网络的东西; 我使用来自各种网站的不同API,例如Last.FM,Delicious,Twitter,…

我为每个网站创建了一个控制器(目前有7个)。

示例视图:

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 ... 

现在我想通过使用这些不同的控制器在一个视图(localhost:3000 / index.hmtl)中显示这些数据。

不推荐使用组件,创建一个控制器并将所有API埋入其中也很难看。

所以我不知道该怎么做。 任何的想法?

首先,您应该将所有数据存储和数据收集方法放入资源和模型中,以便可以从所有控制器访问它们。 您可以在单个控制器中保留内部数据变更操作。 一旦你有这样的组织,你就可以做Hobo所做的事情:为头版创建一个控制器,如果你愿意的话,创建一个“front_controller”。 在这里,您可以显示从所有模型和资源收集的数据,以及指向其他控制器操作的链接。

这些是关于更好地组织模型和控制器的一些有趣的 想法 (胖模型,瘦的控制器是经验法则。既然你说你正在使用其他API(如lastfm和twitter),你可能想看看这个railscast关于创建非ActiveRecord模型(未绑定到数据库的模型)

这里有一些伪代码,请记住它真的只针对你的问题。

 # 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 

让后台工作人员更新你的rest服务而不是每次你想要获取最近的推文时需要调用的控制器可能会好得多 。 这里有很好的文章显示 – 在rubyonrails中运行后台作业的6种方法

  # 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 

首先,您应该将所有数据存储和数据收集方法放入资源和模型中,以便可以从所有控制器访问它们。 您可以在单个控制器中保留内部数据变更操作。 一旦你有这样的组织,你就可以做Hobo所做的事情:为头版创建一个控制器,如果你愿意的话,创建一个“front_controller”。 在这里,您可以显示从所有模型和资源收集的数据,以及指向其他控制器操作的链接。

我想你应该读一下rails的MVC架构 。 在我看来,你忽略了M(odel)部分。 模型应该保存数据,因此是应用程序中最重要的部分。
这些是关于更好地组织模型和控制器的一些有趣的 想法 ( 脂肪模型,瘦的控制器是经验法则。
既然你说你正在使用其他API(比如lastfm和twitter),你可能想看看这个关于创建非ActiveRecord模型的railscast (没有绑定到数据库的模型)

如果您还为用户提供了API,我建议使用RESTful方法,因为一旦掌握了它,它就可以很容易地开发和维护。
您应该阅读有关资源的更多信息,因为您的localhost/lastfmlocalhost/twitter是资源而不是视图。

希望这可以帮助。 祝好运