Ruby on rails 在Rails的一个视图中使用多个控制器
我正在开发一种类似社交网络的东西;我正在使用来自不同网站的不同API,例如Last.FM、Delicious、Twitter 我已经为每个网站创建了一个控制器(目前有7个) 示例视图: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 ..
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