Posted at

RubyのHashをStrong Parametersで検証したい時

More than 3 years have passed since last update.

Hashに対して、permitメソッドは使えない・・・

pry(main)> params = {id: 1, value: 2}

=> {:id=>1, :value=>2}
pry(main)> params.permit(:value)
NoMethodError: undefined method `permit' for {:id=>1, :value=>2}:Hash

なので、通常のHashに対して、permitなどのStrong Parametersのメソッドを使いたい時は

以下のように宣言することで使える。

params = ActionController::Parameters.new({id: 1, value: 2})

実行結果

pry(main)> params = ActionController::Parameters.new({id: 1, value: 2})

=> {"id"=>1, "value"=>2}
pry(main)> params.permit(:value)
Unpermitted parameter: id
=> {"value"=>2}

クラスで実装した時の例

class SampleClass

def initialize(params)
@params = ActionController::Parameters.new(params)
end

def value_params
@params.permit(:value)
end
end

params = {id: 1, value: 2}
sample = SampleClass.new(params)
p sample.value_params

どうしてもpermit使いたいって時は便利かも?