概要
原著者の許諾を得て翻訳・公開いたします。
- 英語記事: 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に変換されています。
これで、パラメーターオブジェクトに一貫した方法でアクセスしやすくなります。