使用辅助方法设置实例变量
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
我有几个控制器设置了一个实例变量,如下:
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