私は英語が苦手なので,商品を買った人を buyer と呼んでよいかどうか自信がありませんが,よいと仮にします。
Product
は buyer に belongs_to
しているはずですね。なので,まずは
rb
1# 未完成
2class Product < ApplicationRecord
3 belongs_to :buyer
4end
と考えます。
Rails の規約によれば,Product
は buyer_id
というカラムを持っていなければなりません。
なので,そういうマイグレーションを書いてカラムを用意してください。
そしてまた Rails の規約によれば,Buyer
というモデルがあるはずですね(???)
おおっと,しかし,product から見た buyer というのは,モデルとしては User
なんでしたよね。
なので,上の記述では十分でなく
rb
1# 未完成
2class Product < ApplicationRecord
3 belongs_to :buyer, class_name: "User"
4end
としなければなりません。
ところで,Rails 5 からは,belongs_to のカラム(buyer_id
)がデフォルトでは空にできません。
参考:Rails5からbelongs_to関連はデフォルトでrequired: trueになる
なので,さらにオプションをつけて
rb
1class Product < ApplicationRecord
2 belongs_to :buyer, class_name: "User", optional: true
3end
としなければならないでしょう。
(買われる前は空ですもんね)
User
から見た「買った商品」も同様に考えます。
ええと,仮に buying_products という英語で合ってるとして話を進めます。
とりあえず
rb
1# 未完成
2class User < ApplicationRecord
3 has_many :buying_products
4end
と。
しかし,これだと Rails の規約から BuyingProduct
というモデルを見に行っちゃいます。モデルクラスは Product
なので,やはり
rb
1# 未完成
2class User < ApplicationRecord
3 has_many :buying_products, class_name: "Product"
4end
ですね。
これでもまだダメで,Rails の規約によれば,自身のモデル名から作った user_id
というカラムを見に行っちゃいます。
見てほしいのは buyer_id
ですよね。
rb
1class User < ApplicationRecord
2 has_many :buying_products, class_name: "Product", foreign_key: "buyer_id"
3end
となるはずです。
えっと,コードを動かさずに書いているので,もしかしたら内容の間違いやタイプミスがあるかもしれません。
うまくいかなかったら教えてください。