【Rails】mergeメソッドを使わず、アソシエーションを組んでデータを渡したい
発生している問題
商品(item)にコメントできる機能を実装しています。
データをpostする際にmergeメソッドを使わないアソシエーションを使った方法で記述することを求められました。
この場合、どういった記述をするべきでしょうか?
仕様
itemに対してshowアクションをすればitemの詳細ページに飛べます。
URLはitem/:id という状態です。
このページにform_forで各アイテムに対してコメントをできるフォームを作成しました。
この情報をDBに保存する際にitem_idをmergeさせて、レコードに情報を保存させようとしています。
現在の記述でも、コメントはDBに保存できている状態です。
routes.rb
resources :items do resources :communications,only:[:create] end
ルーティングでcommunicationsをitemsにネストさせています
item.rb
class Item < ApplicationRecord has_many :communications
communication.rb
class Communication < ApplicationRecord belongs_to :item end
items_controller.rb
class ItemsController < ApplicationController def show @item = Item.find(params[:id]) @message = Communication.new ←この記述もアソシエーションで消したい @user = current_user end end
@itemで該当するitemのidを取得
@messageはform_forの第二引数となります
communications_controller.rb
class CommunicationsController < ApplicationController def create @communication = Communication.create(create_params) redirect_to item_path(@communication.item.id) end private def create_params params.require(:communication).permit(:message,:user_id).merge(item_id: params[:item_id]) ←このmergeの記述をアソシエーションで消したい end end
create_paramのmerge(item_id:params[:item_id]) ←これをアソシエーションで消したい
show.html.haml
= form_for [@item, @message] do |f| = f.text_field :message, placeholder: '',class: "form", value: '' = f.number_field :user_id, value: "#{@user.id}", type: "hidden" = f.submit "コメントする", class: 'send'
hamlで表記しています
form_forの第一引数、第二引数ともにitems_controllerのshowアクションで作成したものです
試した方法
includesメソッドを使い、情報をもたせるように試みましたがうまくいきませんでした。
おそらくモデルに記述を追加するのではないかと考えているのですが、うまくいきませんでした。
どなたか解決方法がわかる方いらっしゃれば、回答お願い致します。
あなたの回答
tips
プレビュー