ネストしているモデルに対するform_withの書き方
ユーザーが投稿した記事(post)に対してコメント(comment)する想定
comments_controller.rbの記述
def new
end
def create
current_user.comments.create!(comment_params)
end
postモデルとcommentモデルの両方にデータを登録するためnewメソッドで両方の情報を呼び出しておく
※postモデルには「誰が」「どんなコメントを」
※commentモデルには「誰が」「どの投稿に」
ストロングパラメータの定義
private
def comment_params
params.require(:comment).permit(:title, :content , :image )
.merge(user_id: current_user.id, post_id: params[:post_id])
end
.merge
ユーザーが記入した情報の他に、記入していない裏の情報も一緒に保存したい時
今回の例では「現在ログイン中のユーザーID(current_user.id)」と「コメント先の投稿ID(params[:post_id])
comments/new.html.erbの記述
<%= form_with model: [@post, @comment] do |f| %>
<p>タイトル<%= f.text_field :title %></p>
<p>本文<%= f.text_field :content %></p>
<p>イメージ画像<%= f.file_field :image %></p>
<%= f.submit "投稿" %>
<% end %>
※ネストしているモデルのDBへの書き込みの場合、form_with内で対象のモデルを複数記述しなければいけない
※今回は「@post」と「@comment」
参考
ネストしているモデルに対するform_withの書き方 - Qiita
mergeメソッドについて改めて理解を深めた - Qiita