Railsのcreateアクションの引数にはカラムとそこに保存したい値を入れると思うんですが、その値をストロングパラメーターを通して決めるときに
class TweetsController < ApplicationController def create Tweet.create(tweet_params) end private def tweet_params params.permit(:image, :text) end
このように渡すことができますよね?
それに対して、createの引数にtweet_paramsにあるものとは別のparamsを加えたいときは、tweet_paramsを展開する必要があると思います。
class TweetsController < ApplicationController def create Tweet.create(image: tweet_params[:image], text: tweet_params[:text], user_id: current_user.id) end private def tweet_params params.permit(:image, :text) end
これを展開せずに
Tweet.create( tweet_params, user_id: current_user.id)
とすると引数エラーになります。
tweet_paramsが持ってるのは{text: 〜, image:〜}というハッシュの状態なので、createの引数としては
({ }, user_id:〜)となり、エラーになるのはなんとなくわかるんですが、
エラーの内容が「数が合わない」という意味のエラーなので、どこを判断して数が合わないというエラーになるのかがよくわからないので、教えていただけたら幸いです。
ちなみに(あんまりちなんでませんが)
外部からの呼び出しを避けるためにprivateメソッドをつけるとありますが、
実際に外部から呼び出される状況、呼び出されたらまずい状況ってなんなのでしょうか??
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。