使用辅助方法设置实例变量

Using a helper method to set an instance variable

我有几个控制器设置了一个实例变量,如下:

before_action :set_max_steam_pressure

.....

def set_max_steam_pressure
  # and then about a dozen lines of code concluding with
  @max_steam_pressure = Valve.where(id: socket_id).first.pressure
end

此代码在大约十几个控制器中重复出现。

是否可以通过辅助方法(作为 before_action 的一部分)来执行此操作,而不必在所有控制器中重复相同的代码?好处:代码少,以后要改的话,只改一处。

您可以使用“controller concern”,例如:

app/controllers/concerns/steam_pressure_setup.rb

module SteamPressureSetup
  extend ActiveSupport::Concern

  included do
    before_action: set_max_stream_pressure
  end

  def set_max_stream_pressure
    # ...
  end
end

然后将它包含在需要它的控制器中。

app/controllers/my_controller.rb

class MyController < ApplicationController
  include SteamPressureSetup

  # ...
end

参考:https://api.rubyonrails.org/classes/ActiveSupport/Concern.html