gpt4 book ai didi

ruby-on-rails - 在 Rails 的一个 View 中使用多个 Controller

转载 作者:数据小太阳 更新时间:2023-10-29 06:56:19 25 4
gpt4 key购买 nike

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

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

示例 View :

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

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

组件已被弃用,创建一个 Controller 并将所有 API 埋在其中似乎也很丑陋..

所以我不知道该怎么做。有什么想法吗?

最佳答案

首先,您应该将所有数据存储和数据收集方法放入资源和模型中,以便所有 Controller 都可以访问它们。不过,您可以将内部数据变异操作保留在您的各个 Controller 中。一旦你像这样组织起来,你就可以做 Hobo 做的事:为首页创建一个 Controller ,如果你愿意的话,可以是“front_controller”。您可以在此处显示从所有模型和资源收集的数据,以及指向其他 Controller 操作的链接。

这些是一些interesting thoughts更好地组织你的模型和 Controller (胖模型,瘦 Controller 是一个经验法则。既然你说你正在使用其他 API(比如 lastfm 和 twitter),你可能想看看 this railscasts关于创建非 ActiveRecord 模型(不绑定(bind)到数据库的模型)

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

#  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

让后台 worker 更新您的休息服务可能会好得多,而不是让您每次想要获取最近的推文时都需要调用的 Controller 。这是一篇不错的文章,显示 - 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

关于ruby-on-rails - 在 Rails 的一个 View 中使用多个 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/885477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com