4

我正在嘗試創建一個rails應用程序,用戶可以在其中創建事件並邀請其參與者並需要您的幫助! 我一直在圈子裏,嘗試幾件事情,但似乎並不正確,現在這讓我瘋狂! 我正在使用導軌4.Rails has_many:通過關聯

您將如何設置活動模型?

User 
has_many :events through :meeting //for the participants? 
has_many :events  // for the organizer? 

Event 
belongs to :user 
has_many :participants, class_name: "User" 


Participant 
belongs to :user 
has_many :events through :meeting 

Meeting 
has_many :participants 
has_many :events 

這是否有意義? 我需要參與者模型嗎?還是我只是過度設計它? 我想我有點困惑組織者是一個用戶和參與者也是用戶和會議需要組織者和參與者,所以不太清楚如何使這項工作...

也讀我可以建立會議關係只有當參與者被添加時。這是否會走? 謝謝!

+0

結賬http://stackoverflow.com/questions/21806860/rails-associations-users-has-many-users-through-comments/21807202#21807202 –

回答

1

首先您不需要參與者模型。如果我想在會議模型中存儲一些額外信息,則會使用此結構。如果不是,您可以直接使用has_and_belongs_to_many。

User 
has_many :meetings 
has_many :attending_events, through: :meetings, source: "Event" //for the participants 
has_many :events  // for the event organiser 

Event 
belongs to :user // The organiser 
has_many :meetings 
has_many :participants, through: :meetings, source: "User" 

Meeting 
belongs_to :participant, class_name: "User" 
belongs_to :attending_event, class_name: "Event" // Use attending_event_id as foreign_key 
+0

感謝。我會試試這種方式。真的有幫助。 – user7330

+0

很好。我快到了!一個澄清雖然。對於會議,應該是 會議 belongs_to:事件 或belongs_to:attending_events? 我想我的會議遷移應該有:participant_id和attending_event_id對不對?而不是user_id event_id?再次感謝 – user7330

+0

您可以使用它來使其更加語義化。我在編輯答案。 –

0

你不想做的事:

has_many :events 
has_many :events #doesn't matter that it's a through table 

我已經在過去做到了這一點,並沒有...

User 
    has_many :invites, dependent: :destroy 
    has_many :invited_events, through: :invites, source: :event 

Event 
    has_many :invites, dependent: :destroy 
    has_many :invitees, through: :invites, source: :user 

Invite 
    belongs_to :event 
    belongs_to :user 
在邀請加入表

然後,有一個布爾列creator知道該用戶是否創建了該事件。您還可以添加一列以顯示用戶是否接受邀請(以顯示參與)。

清潔和簡單的has_many通過......不復雜=)

3

不,你不需要Participant型號:

User 
has_many :meetings 
has_many :events, through: :meetings 

Event 
has_many :meetings 
has_many :participants, through: :meetings, class_name: "User" 

Meeting 
belongs_to :user 
belongs_to :event 

User一個實例,你可以這樣做:

user.events # => List of Events 

而且從Event的實例你可以這樣做:

event.participants # => List of Users 

Ruby Guides中的has_many :through解釋與您想要做的相似,請查看。