Railsにおいて、APIモードでストロングパラメータを使用すると、モデルのカラム名以外のキーでパラメーターを受け取れません。
具体的に言いますと、posts
テーブルを作成し、title
カラムとbody
カラムを追加したとします。
通常モードでは、例えば title
、body
、user_name
をキーに、フォームから送信すると、以下のようにストロングパラメータで受け取れると思います。
class PostsController < ApplicationController def create @user_name = post_params[:user_name] end private def post_params params.require(:post).permit(:title, :body, :user_name) end end
しかし、APIモードで実装し、以下のようにリクエストを送信すると、postsテーブルにはない user_name
だけがストロングパラメータで受け取れません。
{ "title" : "タイトルです", "body" : "ボディです", "user_name" : "ユーザーネームです" }
特にエラーなどが起きるわけではなく、post_params[:user_name]
はnil
になります。
原因はなんでしょうか?
わかる方いらっしゃいましたらご教授いただけると助かります。
補足
APIモードが原因ではないことがわかりました。
通常モードでも、Postmanなどでリクエストを送信すると、受け取れないです。
postsテーブルにはない からでは?
ご回答ありがとうございます。
はい、postsテーブルに user_nameカラム はありません。
しかし、通常モードではストロングパラメータでuser_nameをキーとして受け取れます。
APIモードのときのみ受け取れません。
こちらは回答ではなく質問への追記修正依頼です。
今回の意図としては、回答できるか微妙なので、可能性の確認をしてもらいたかったです。
結局単テーブルにないから、というのが理由のような気がします。
Railsの仕様部分。ストロングパラメータってそれだけ制約が強いものだと思います。じゃあどうすればというところまで私の方では分かってないので回答はできませんが、ストロングパラメータで結合先のテーブルも見に行くような繋げ方があるんじゃないかなぁとボンヤリ思ってます。