Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails的一个视图中使用多个控制器_Ruby On Rails_Ruby - Fatal编程技术网

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

Ruby on rails 在Rails的一个视图中使用多个控制器,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在开发一种类似社交网络的东西;我正在使用来自不同网站的不同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 ..

我正在开发一种类似社交网络的东西;我正在使用来自不同网站的不同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/lastfm首先,您应该将所有数据存储和数据收集方法放入资源和模型中,以便所有控制器都可以访问它们。不过,您可以将内部数据变异操作保留在各个控制器中。一旦你把它组织成这样,你就可以做Hobo所做的事情:为首页创建一个控制器,“front_controller”,如果你愿意的话。在这里,您可以显示从所有模型和资源收集的数据,以及指向其他控制器操作的链接。

我认为您应该阅读一些关于rails的内容。 在我看来,你似乎忽视了它的M(模型)部分。模型应该保存数据,因此是应用程序中最重要的部分。
以下是一些关于如何更好地组织模型和控制器的建议(胖模型、瘦控制器是一条经验法则。
因为您说您正在使用其他API(如lastfm和twitter),您可能想了解一下如何创建非ActiveRecord模型(不绑定到数据库的模型)

如果您还为用户提供了一个API,我建议您使用RESTful方法,因为一旦掌握了诀窍,开发和维护它就非常容易了。
您应该阅读更多相关内容,因为您的
localhost/lastfm
localhost/twitter
是资源,而不是视图


希望这有帮助。祝你好运。首先,你应该将所有的数据存储和数据收集方法放入资源和模型中,以便所有控制器都可以访问它们。不过,你可以将内部数据变异操作保存在各个控制器中。一旦你像这样组织起来,你就可以做Hobo所做的事情:创建一个控制器仅用于首页,“front_controller”(如果愿意)。在这里,您可以显示从所有模型和资源收集的数据,以及指向其他控制器操作的链接

下面是一些关于如何更好地组织模型和控制器(胖模型、瘦控制器是一条经验法则)。 既然您说您正在使用其他API(如lastfm和twitter),那么您可能想了解一下如何创建非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
#伪代码
类TwitterController<应用程序控制器
def索引
@服务={
:twitter=>TwitterModel.find(:all,…),
}
结束
def-update_-twitter
TwitterUpdaterClass.update{| twit|
_m=TwitterModel.new
_m、 message=twit.msg
_m、 from=twit.from
# ..
_m、 拯救
}
结束
结束
类MyIndexController<应用程序控制器
def索引
@服务={
:twitter=>TwitterModel.find(:all,…),
:lastfm=>lastfmfmodel.find(:all,…)
}
结束
结束
让后台工作人员更新您的rest服务,而不是您每次想要获取最新推文时都需要调用的控制器,可能要好得多。 这是一篇很好的文章,展示了-

#更多伪代码
类TwitterWorker
This。将您的数据收集放入模型中。搜索Twitter?这是一个模型。Scraping Last.fm?这是一个模型。控制器是供客户与您交谈的-他们处理请求。(即使此答案复制了其他两个答案的文本,我在这里发表评论,因为这是公认的答案。)您现在可以使用,而不是创建非活动记录模型,它“提供了一组已知的接口供模型类使用。例如,它们允许操作包帮助程序与非活动记录模型交互。”
  # 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