質問: すみません。 簡潔にしたかったのですが、うまく短くできませんでした。 jsonで次をリクエストします。 ``` { "hoge_id": "fuga" } puts params paramsの中身はこちらです。 結果 #{"hoge_id => "fuga", "controller => users", "action" => "piyo", "user => {}" puts prams.require(:user).permit(:hoge_id) こんな感じで、requireメソッドを使いキーでしぼって、permitメソッドに渡したいのですが、エラーになります。 :userではなく、ほかの値を入れてもエラーになります。 結果 # "fuga" **paramsで値を取得する際にrequireを必ずしも使わなくもいいものなのでしょうか?** 僕の解釈では、キーを指定してそれ以外を受け取らないようにする目的だと思うのでいらないのではないかと思いました。 その代わり、permitでしっかりと受け取りたいものを指定しています。 試しに、users_controllerの中で{"name": "太郎"}をjsonでPOSTしてputs prams.require(:user).permit(:name)のようにするとuser => {"name": "太郎"}とちゃんとuserキーの中に値が格納されます。nameはusersテーブルにもともとあるカラムです。 hoge_idはusersテーブルにもともとないものなのでそこが異なっていると思うのですが、よくわかりませんでした。 ``` このように、userをキーとしてjsonでリクエストすると、requireが使えるので、このように、jsonで送るのが正で、userキーをつけないのはよくないかもしれませんが、要望でuserキーを使わないことになっています。 ``` { "user": { "hoge_id": "fuga" } } ``` サンプルをネットで探しましたが、params.require(:user).permit(:name)のようなフォーマットしかなく、RailsGuideには ``` params.permit(:name) ``` のようにparamsから直接permitを呼んでいるものもあるのですが、これがよい使い方なのかがわかりませんでした。 ActionController::Parameters
回答: Rails4でStrong Parameterに出くわした時に色々やったときの経験では、 DBに入れるには permitは必要。permitしない項目は無視される。 requireは不要、params[:users]でよい。 でした。 ですのでそれに照らすと ``` { "hoge_id": "fuga" } ``` で user.update(hoge_id: 某) とするには user.update(hoge_id: params.permit(:hoge_id)) で良いかと。