rails:3351
From: naopontan <naopontan@g...>
Date: Fri, 18 Dec 2009 10:50:53 +0900
Subject: [rails:3351] Re: 多対多の設計について
naopontan です。 > [会員] n --- n [申込] n --- 1 [種目] > > でどうでしょう。 ふむふむ。 > has_and_belongs_to_many を使っているので、 確認になってしまいますが... あえて has_many :through ではなく、 has_and_belongs_to_many(habtm) を使うのが ミソという事ですよね? #固定観念で habtm で出来ることは has_many :through で全て出来ると思い込んでました。 2009年12月17日21:00 Shinya Kawaji <kawaji@g...>: > かわじ、です。 > > >> 多対多の関連を考えました。 >> [会員] --- [申込] --- [種目] > >> 会員と申込は1対nの関係ですが、ダブルスの場合を考慮すると、この関係が >> 逆転します。 >> つまり「1つの申込みに2人の会員が存在する」という事です。 >> (Entryテーブルには user_id と pair_id を想定) >> >> このような場合の DB設計を Rails で表現する良いアイデアがあればご教示下 >> さい。 >> #ダブルスの申込み時は[申込」を2レコード作ることで対応できそうですが、 >> 何かと面倒くさそうです。 > > 普通に考えて、 > > [会員] n --- n [申込] n --- 1 [種目] > > でどうでしょう。 > > class User < ActiveRecord::Base > has_and_belongs_to_many :entries > end > > class Entry < ActiveRecord::Base > has_and_belongs_to_many :users > belongs_to :item > end > > class Item < ActiveRecord::Base > has_many :entries > end > > has_and_belongs_to_many を使っているので、 > entries_users というテーブルが別途必要です。 > > # ある会員の申し込み > user.entries > > # ある会員の申し込んだ種目 > user.entries.collect(&:item) > > # ある申し込みの会員 > entry.users > > # ある申し込みの種目 > entry.item > > # ある種目の申し込み > item.entries > > # ある種目に申し込んだ会員 > item.entries.collect(&:users) > > > -- > ML: rails@r... > 使い方: http://QuickML.com/ > -- ML: rails@r... 使い方: http://QuickML.com/
3348 2009-12-17 07:40 [naopontan@g... ] 多対多の設計について 3349 2009-12-17 13:00 ┗[kawaji@g... ] -> 3351 2009-12-18 02:50 ┗[naopontan@g... ] 3352 2009-12-18 04:09 ┗[kawaji@g... ]