has_many belongs_toで関連付けを行っているモデルで、ちゃんと情報が取れるかの確認をしていたら結構時間がかかってしまったのでメモ
関連付け
belongs_toとhas_manyを使います。基本的にhas_manyは親,belongs_toが子です。
例えばUserモデルとTweetモデルがあったとして、
Userは1つ以上のTweetがあることが想定されるので、User has many Tweet
Tweetは1人のユーザーしか持たないので Tweet belongs to User
みたいな感じになります。
わかりにくかったら公式を読んでください。
実装
今回使うのはPostとPostProductの2つのモデルUserとPostだけであれば新規のPostデータに外部キーである(user_id)を含めるのは簡単なのですが、
今回はPostのデータを取得することから始めないといけなかったので苦戦しました。
postが持っている情報は確認できるのですが、それをpostproductで使おうとしたら情報が取れないのでエラーになりまくりでした。
formでhidden_fieldを使うことも考えましたがそもそも取れてないので却下
いろいろ調べてたところ、link_toでパラメーターが送れることがわかった。
<%= link_to "リンク名", example_path, カラム: カラムに対する値, class: "css" %>
この書き方で送れるとのこと。
僕はこんな感じで使いました。
<%= link_to "投稿に商品追加", post_post_products_path(@post) post_id: @post.id, class: "dropdown-item" %>
送るだけじゃ使えないので、レシーバーにも処理を書きます。
def index
@post = params[:post_id]
end
これでidを渡すことができました!
ですが、これだと @postに入っているのはidだけなので意味がありません。
def index
post = params[:post_id]
@post = Post.find_by(id: post)
end
find_byを使うことでidに対応する情報を持ってくることができます。
以上です。