我有一个填充实例变量的函数,该变量用于在侧栏中显示站点活动。
由于几乎每个控制器操作都需要显示站点活动,我正在重复每个控制器中的代码并从每个操作中调用它。所以我有相同功能的多个副本。活动功能独立于控制器和动作。
显然这是错的,所以我的问题是我应该在哪里放置这个功能。
def activity
@activity = Activity.all.limit(30)
end
应用程序布局
<%= render partial: "shared/activity", collection: @activity %>
答案 0 :(得分:1)
您可以将其放在ApplicationController中。我要做的是使用before_action(http://guides.rubyonrails.org/action_controller_overview.html#filters)。样本将是:
class ApplicationController < ActionController::Base
before_action :set_activities
private
def set_activities
@activity = Activity.all.limit(30)
end
end
你也不需要.all.limit你可以马上做.limit。
答案 1 :(得分:0)
将该方法放在应用程序帮助文件中,并使用direct而不是使用@activity对象。
在application_helper.rb
中def activity
Activity.all.limit(30)
end
从控制器中删除
<%= render partial: "shared/activity" %>
在activity.html.erb
直接调用activity
方法,它会给出你想要的列表。
使用上述方法在调用render时从控制器中删除依赖项,您不需要显式传递@activity
。