2012-06-09 128 views
0

我有兩個模型,用戶和事件。我需要用戶和事件之間的兩種關係。導軌關聯has_many_and_belongs_to

  • 用戶(:作爲組織者)< ------->事件,多對多的關係
  • 用戶(:如出席者)< ------->事件,多對多關係

我猜如果兩個不同的has_many_and_belongs_to與多態關聯可以用來實現關係。我是新來的鐵路,所以我將不勝感激關於這個問題的任何幫助。

+0

能夠在一個用戶是組織者,同時S(他)是與會者?如果不是這種情況,我不認爲你需要一個多態關聯 – jagse

回答

2

你不需要這種多態關係。

定義兩個協會兩款車型之間,你可以這樣做:

class User 
    has_many :organized_events, foreign_key: :organizer_id, class_name: "Event" 
    has_many :attended_events, foreign_key: :attendee_id, class_name: "Event" 
end 

class Event 
    belongs_to :organizer, class_name: "User" 
    belongs_to :attendee, class_name: "User" 
end 

這會給你一個一對多的關係。

如果您需要多對多,您需要每個關聯的連接表。

class User 
    has_many :attendances, foreign_key: :attendee_id 
    has_many :attended_events, through: :attendances 
end 

class Event 
    has_many :attendances, foreign_key: :attended_event_id 
    has_many :attendees, through: :attendances 
end 

class Attendance 
    belongs_to :attended_event, class_name: "Event" 
    belongs_to :attendee, class_name: "User"   
end 

和事件組織者協會類似的東西。

見我的問題here

+0

連接表工作完美,謝謝 – pratuat

+0

太棒了!很高興它對你有效 –

0

正如我在我的評論中提到的,如果您的關係組織者和與會者可以同時存在於同一用戶中,則只需要一個多態關聯。如果是這種情況,請使用多態關聯,如果不是,則可以使用關聯或has_and_belongs_to_many關聯。第一個是更靈活的,因爲你有一個額外的模型,可以舉例驗證。