每个控制器动作的重复功能

时间:2017-09-09 07:56:24

标签: ruby-on-rails

我有一个填充实例变量的函数,该变量用于在侧栏中显示站点活动。

由于几乎每个控制器操作都需要显示站点活动,我正在重复每个控制器中的代码并从每个操作中调用它。所以我有相同功能的多个副本。活动功能独立于控制器和动作。

显然这是错的,所以我的问题是我应该在哪里放置这个功能。

def activity
  @activity = Activity.all.limit(30)
end

应用程序布局

<%= render partial: "shared/activity", collection: @activity %>

2 个答案:

答案 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