我想用
ActionController::Parameters.action_on_unpermitted_parameters = :raise
要引发异常,会传入未经许可的参数,但我只想在特定的控制器方法上执行此操作,而不是在/ config /中设置它并将其应用于整个环境。有没有办法这样做?
答案 0 :(得分:2)
我不确定Wasif的答案能否正常运作,因为它永远不会回复。我认为你至少想要这个:
class SomeController < ApplicationController
around_action :raise_action_on_unpermitted_parameters, only: %i[create update]
def index
# ...
end
def create
# ...
end
def update
# ...
end
private
def raise_action_on_unpermitted_parameters
begin
ActionController::Parameters.action_on_unpermitted_parameters = :raise
yield
ensure
ActionController::Parameters.action_on_unpermitted_parameters = :log
end
end
end
即便如此,我也不确定你是否会遇到竞争条件,如果你正在使用像Puma这样的多线程服务器,它会不小心引发不同的控制器操作。
答案 1 :(得分:0)
Filters
救援!
您可以在控制器中定义包含params设置的私有方法,并在before
过滤器中调用该方法以执行特定操作。
E.g。要在create
和:update
操作上引发例外,您可以执行以下操作:
class SomeController < ApplicationController
before_action :raise_action_on_unpermitted_parameters, only: %i[create update]
def index
# ...
end
def create
# ...
end
def update
# ...
end
private
def raise_action_on_unpermitted_parameters
ActionController::Parameters.action_on_unpermitted_parameters = :raise
end
end