我一直在查看Rails-style-guide,它说我不应该在视图中与控制器共享两个以上的实例变量。我和我的观点共享了两个以上的实例变量,因为
例如,我有一个Group show视图,它传入@ groups,@ users(这是组中的所有用户),@notifications(用户的通知,在下拉列表中随处可用),@活动,@ message(用于留言板)和@message(可以生成的新消息。
这样我的观点看起来像这样:
<% @activities.each do |activity| %>
我应该只是传递@group(急切地加载它的用户,消息等)并在我的视图中看到这样的调用吗?:
<% @group.activities.future_activites.each do |activity| %> ...
感谢。
答案 0 :(得分:1)
这是一种很好的技巧,可以减少从控制器到视图的对象数量:
长话短说,尝试创建一个类或对象,其中包含封装您要共享的信息的方法。
从你的例子中,我可以看到这样的事情:
应用/立面/ group_show.rb 强>
class GroupShow
attr_reader :group
def initialize(group)
self.group = group
end
def future_activities
group.activities.future_activities
end
end
应用/控制器/ groups_controller.rb 强>
def show
group = Group.find(params[:id])
@facade = GroupShow.new(group)
end
应用/视图/组/ show.html.erb 强>
<% @facade.future_activities.each do |activity| %>
或者,对于更简单的版本(特别是因为活动已经是@group
对象的一部分,您可以将委托方法直接添加到您的组模型中,如下所示:
应用/模型/ group.rb 强>
def future_activities
activities.future_activities
end
并像这样访问:
应用/视图/组/ show.html.erb 强>
<% @group.future_activities.each do |activity| %>