【Rails】form_withについて(scopeオプション)

はじめに

 form_withでscopeオプションがあるとないとでは、データの送られ方がどう違うの気になったので調べてみました。

scopeなし

Image from Gyazo

コントローラーで受け取ったparams(値)を見てみると、

<ActionController::Parameters {"authenticity_token"=>"nPZ6KTkVEA3QFWhaPDV30Bf6VjRbyey//NPjvjbDYoTcAKLOAsZGxXBJcknlsYmuvpFtwIhNPsVM1ShbLSQu7w==", 
"title"=>"こんにちは", 
"text"=>"おはようございます。",
 "commit"=>"Save ",
 "controller"=>"articles",
 "action"=>"create"} permitted: false>

Prametersハッシュでtitleとtextがキーになってますね。

scopeあり

Image from Gyazo

コントローラーで受け取ったparams(値)を見てみると、

params
=> <ActionController::Parameters {"authenticity_token"=>"ZFO8Q1cdUc5rR6Rkrj5ZcL93isCIpKJFn223e+31KjwkpWSkbM4HBssbvnd3uqcOFhyxNFsgcD8va3ye9hJmVw==", 
"article"=>{"title"=>"こんにちは", "text"=>"おはようございます。"},
 "commit"=>"Save Article", "controller"=>"articles", "action"=>"create"} permitted: false>

Prametersハッシュの中にarticleハッシュがありますね。その中でtitleとtextがキーになってます。 つまり、コントローラーではparams[:article]と書くだけで両方の値が受け取れるんです。 scopeがないとparams[:title]とparams[:text]と2つ書かなければいけないのです。 scopeを使うメリットありますね。