【发布时间】:2013-04-12 20:54:09
【问题描述】:
前几天,我偶然发现了 Sandi Metz 的 rules,其中一个写道
当你的 Rails 控制器有调用时,你只能实例化一个对象来做任何需要做的事情。
对 Rails 还是很陌生,但我一直认为我的控制器方法有一些味道,这证实了这一点。我有一个父模型的仪表板视图,它显示有关他们的孩子(不同的模型)和孩子的挑战(另一个模型)的信息,所有这些都具有不同的控制器。这是我们的控制器方法之一的示例。
def dash
@parent = current_user
@children = @parent.children
@completed_challenges = @parent.assigned_challenges.where("parent_id =?", @parent.id).where("completed =?", true)
@validated_challenges = @parent.assigned_challenges.where("parent_id =?", @parent.id).where("validated =?", true)
@enabled_rewards = @parent.enabled_rewards.where("parent_id =?", @parent.id)
end
我想知道是否可以发送多个请求以从它们各自的控制器中获取所有这些对象,而不是将它们全部集中在一个请求中。我知道我可以使用 Ajax 做到这一点,但是有没有办法在页面加载时只执行多个 http 请求?
感谢您的帮助!
【问题讨论】:
-
对于仪表板视图,我不确定我是否会过于努力和快速地坚持这一点。仪表板的全部意义在于在一个位置集中显示一堆数据。也就是说,您可以实例化父级并使用装饰器之类的东西(通过 draper)来获取派生数据。这使控制器和视图都非常干净。
-
感谢@ChrisHeald,我终于有机会查找 Draper/decorator。在这种情况下,绝对是一种可以帮助我的模式。但是,您认为我在这里所做的数据操作类型是否足够“以演示为中心”(引用 Draper README),或者更多属于模型的内容?
标签: ruby ruby-on-rails-3 oop model-view-controller