当前位置:  开发笔记 > 后端 > 正文

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

如何解决《在Rails中的一个视图中使用多个控制器》经验,为你挑选了2个好方法。

我正在研究类似社交网络的东西; 我使用来自各种网站的不同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,看起来也很丑陋.

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



1> lian..:

首先,您应该将所有数据存储和数据收集方法放入资源和模型中,以便可以从所有控制器访问它们.您可以在单个控制器中保留内部数据变更操作.一旦你有这样的组织,你可以做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

可能是更好的有背景的同事更新,你需要调用你想获取最新的鸣叫您的每一次休息的服务,而不是一个控制器.这里有很好的文章显示 - 在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


GJ敲我的确切文字:P

2> Nick Retalla..:

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

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有