Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

Rails 6: each_valueメソッドがActionController::Parametersに追加(翻訳)

概要

原著者の許諾を得て翻訳・公開いたします。

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_valueHash#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"}

そしてこのparamsActionController::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に変換されています。

これで、パラメーターオブジェクトに一貫した方法でアクセスしやすくなります。

関連記事

Ruby 2.7: ハッシュからキーワード引数への自動変換が非推奨に(翻訳)


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。