微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – 在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”.在这里,您可以显示从所有模型和资源收集的数据,以及指向其他控制器操作的链接.

这些是更好地组织你的模型和控制器的一些interesting thoughts(胖模型,瘦的控制器是经验法则.
既然您说您正在使用其他API(如lastfm和twitter),您可能需要查看this railscasts关于创建非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

后台工作者更新你的休息服务而不是每次你想要获取最近的推文时需要调用的控制器可能会好得多.
这是很好的文章显示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

原文地址:https://www.jb51.cc/ruby/269404.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐