2015-09-16 137 views
-2

在我的應用程序中有兩個模型用戶和事件。我想關聯兩個模型,例如,一個用戶只能創建單個事件,但可以登錄其他用戶創建的許多事件。如何在rails中關聯模型

我曾嘗試下面的關聯,但它不是爲我工作

class User < ActiveRecord::Base 
    has_one :event 
    belongs_to :event 
end 

class Event < ActiveRecord::Base 
    has_many :users 
    belongs_to :user 
end 

如何在上述條件下兩種模式相關聯。

+0

您可能無法做到這與協會單獨。您將需要額外的代碼來操縱關聯... –

回答

1

這些關係指的是底層的數據庫結構。

當您說belongs_to :event時,Rails將在users表上尋找名爲event_id的列。您告訴它,每個用戶都有一個事件,用戶將存儲與其關聯的事件。

當您編寫has_one :event時,Rails將在數據庫的events表上尋找名爲user_id的列。您告訴它每個用戶有一個事件,並且事件模型負責保存與其關聯的用戶。

如果您希望用戶只能創建一個事件,並讓每個事件屬於用戶,那麼你會希望以下內容:

class User < ActiveRecord::Base 
    has_one :event 
end 

class Event < ActiveRecord::Base 
    belongs_to :user 
end 

如果你希望用戶能夠參加多項活動,你我們需要一個單獨的表格來保存這些信息。

class EventRegistration < ActiveRecord::Base 
    belongs_to :event 
    belongs_to :user 
end 

你會再添加一個新行event_registrations表,你想與給定用戶連接每個事件。這個表將被稱爲連接表,因爲它的主要目的是在其他表中的記錄之間建立關係(這是SQL語句的作用)。

+0

您應該使用has_and_belongs_to_many來獲得與會者的關係。簽出此文檔爲它:http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association –

+0

@JakeKaad我避免了在所有生產應用程序。 HABTM將整個表格抽象出來,這幾乎從來不是我想要的。最終,您的連接表最終會包含邏輯或其自己的數據。你想直接處理它。 – Chris