概要
原著者の許諾を得て翻訳・公開いたします。
- 英語記事: Rails 6 adds each_value method to ActionController::Parameters – Saeloun Blog
- 原文公開日: 2019/11/20
- 著者: Narendra Rajput
- サイト: Saeloun -- Ruby on Railsのコンサルティング会社で、Rails + React開発のほかに、React Nativeによるモバイルアプリ開発も手がけています。
Rails 6: each_valueメソッドがActionController::Parametersに追加(翻訳)
Rails 6のActionController::Parametersに、新たにeach_value
メソッドが追加されました。
名前でわかるように、このメソッドはActionController::Parameters
の各値をイテレートしてyield
します。ちょうどHash#each_value
のように使えます。
Hash#each_value
vs ActionController::Parameters#each_value
ActionController::Parameters#each_value
はHash#each_value
とは異なる点があります。ActionController::Parameters#each_value
は、値に含まれるすべてのハッシュをActionController::Parameters
オブジェクトに変換してから値をブロックにyield
します。値をシンプルに返すわけではありません。
コード例
以下の例で考えてみましょう。ActionController::Parameters
にユーザープロファイルの詳細を定義しています。
params = ActionController::Parameters.new({
name: {
first: "Narendra",
last: "Rajput"
},
gender: "Male",
})
#=> <ActionController::Parameters {"name"=>{"first"=>"Narendra", "last"=>"Rajput"}, "gender"=>"Male"} permitted: false>
ここで、params
に普通のハッシュオブジェクトをもうひとつ足してみます。
params[:social_profiles] = {
twitter: "https://twitter.com/HiSaeloun",
github: "https://github.com/saeloun"
}
#=> {:twitter=>"https://twitter.com/HiSaeloun", :github=>"https://github.com/saeloun"}
そしてこのparams
をActionController::Parameters#each_value
でイテレートします。
params.each_value do |value|
puts value.inspect
end
<ActionController::Parameters {"first"=>"Narendra", "last"=>"Rajput"} permitted: false>
"Male"
<ActionController::Parameters {"twitter"=>"https://twitter.com/HiSaeloun", "github"=>"https://github.com/saeloun"} permitted: false>
ご覧のとおり、paramsのsocial_profiles
は1個のハッシュですが、each_value
ブロックでActionController::Parameters
に変換されています。
これで、パラメーターオブジェクトに一貫した方法でアクセスしやすくなります。