Ruby on rails 切换";ActionController::Parameters.action“在未经许可的情况下”U参数=:raise";关于具体的控制器方法?

Ruby on rails 切换";ActionController::Parameters.action“在未经许可的情况下”U参数=:raise";关于具体的控制器方法?,ruby-on-rails,ruby-on-rails-5,strong-parameters,Ruby On Rails,Ruby On Rails 5,Strong Parameters,我想用 ActionController::Parameters.action_on_unpermitted_parameters = :raise 要引发异常,将传入未经许可的参数,但我只想在特定的控制器方法上执行此操作,而不是在/config/中设置它并将其应用于整个环境。有什么方法可以做到这一点吗?更新:(从迈克的回答中汲取灵感) 要仅对一组控制器操作限制更改,并将其恢复为调用操作之前类属性保持的原始值,我们可以使用around\u action class SomeController

我想用

ActionController::Parameters.action_on_unpermitted_parameters = :raise
要引发异常,将传入未经许可的参数,但我只想在特定的控制器方法上执行此操作,而不是在/config/中设置它并将其应用于整个环境。有什么方法可以做到这一点吗?

更新:(从迈克的回答中汲取灵感)

要仅对一组控制器操作限制更改,并将其恢复为调用操作之前类属性保持的原始值,我们可以使用
around\u action

class SomeController
我不确定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
class SomeController
即使这样,我也不确定您是否会遇到竞争条件,如果您使用的是Puma这样的多线程服务器,它会在不同的控制器操作上意外引发竞争条件