charita
@charita

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

「1対0以上1以下」の場合のアソシエーション

解決したいこと

Ruby on Railsのアソシエーションについて質問です。
「1対0以上1以下」という関係の場合、どのようなアソシエーションを設定したら良いか悩んでいます。

現在フリマアプリを作成中で、データベースの設計を行っております。
必要となるテーブルは、①users(ユーザー) ②items(商品) ③payments(支払い情報)としました。

商品が購入されれば、その商品と支払い情報を紐づける必要があります。
また、あるユーザーに購入された時点で他のユーザーは購入できなくなるため、
一つの商品が支払い情報を2つ以上持つことはありません。

このような状態の場合、アソシエーションはどのような表記となるのでしょうか?

私の考えは、以下のように1対多と同様となります。

■items
has_many :payments

■payments
belongs_to :item

has_manyは、対"上限のない多数"を意味するというより、
対になるテーブルからのキー参照を可能にしたり、
dependentのような従属関係を持たせるためだと考えたからです。

以上、質問及び仮説となります。
ご指摘、ご意見いただけますと幸いです。

0

2Answer

一つの商品が支払い情報を2つ以上持つことはありません。

ご自身で書いている通り、1つの商品に対して複数の支払い情報を持つことはありませんので、items has_many :paymentsは誤りだと思います。
正しくはitems has_one :paymentかと。

参考資料:
Railsガイド: has_one関連付け

0Like

Your answer might help someone💌