2010-05-03 64 views
0

我是Rails的全新品牌,請耐心等待。活動記錄協會:has_one:through?或多個has_one的?

我有3個模型:User,Section和Tick。

每個部分都是由用戶創建的。我對這個協會的猜測如下:

class Section < ActiveRecord::Base 
    has_one :user 
end 

接下來,每個用戶可以「勾選」一個部分 - 只有一次。所以對於每個勾號,我都有一個section_id,user_id和時間戳。這是我卡住的地方。這是否需要「has_one:through」關聯?如果是這樣,哪個方向?如果沒有,那我就走了。

哪個協會在這裏工作?

謝謝!

回答

1

這應該是正確的:

class User < AR::Base 
    has_many :sections #user can have many sections 
    has_many :ticks, :through => :sections #user has many ticks, but the left outer join goes through sections 
end 

class Section < AR::Base 
    belongs_to :user #each section belongs to 1 user 
    has_many :ticks #each section can have a tick, because of can use has_many 
end 

class Tick < AR::Base 
    belongs_to :section #a tick belongs to a section 
    has_one :user, :through => :sections #belongs_to :through does not exist, use has_one through 
end 
+0

在您的代碼中創建關係的方式反映了關係在用戶和打勾之間,並且該部分是將它們結合在一起的部分。不應該是用戶和部分是相關的,並且刻度線是將它們綁定在一起的東西嗎?至少,這就是我的看法 – Faisal 2010-05-03 08:40:20

+0

我不確定「屬於:用戶」是否正確 - 我認爲它會是「has_one:user」? ......也許我的解釋不好。如果我錯了或需要重新解釋,請糾正我。這看起來像是費薩爾的一個不同的例子......試圖找出哪個是正確的。感謝您的幫助!!! – jmccartie 2010-05-03 22:38:31

0

嘗試以下

class Tick < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :section 
    validates_uniqueness_of :user_id, :scope => :section_id #There is only one user per section 
end 

參考This

1
class User < AR::Base 
    has_many :ticks 
    has_many :sections, :through => :ticks 
end 

class Section < AR::Base 
    has_many :ticks 
    has_many :users, :through => :ticks 
end 

class Tick < AR::Base 
    belongs_to :user 
    belongs_to :section 
    validates_uniqueness_of :user_id, :scope => :section_id 
end 

我們發現用戶打勾你做user.sections,或找到誰打勾某款你做section.users

所有用戶的部分

你在這裏有一個多對多的關係(一個用戶可以有很多部分,一個部分可以屬於很多用戶),所以這個需要一個連接模型來關聯它們。在這種情況下,Tick模型充當聯接模型。

+0

感謝。由於需要user_id來創建節,我是否需要在那裏創建單獨的關聯?減:蜱協會?用戶has_many:部分,部分has_one:用戶? – jmccartie 2010-05-03 22:30:43

+0

嗯,如果你想要一個一對多的關係(用戶有很多部分,部分屬於一個用戶),那麼你應該這樣做,用戶has_many:sections,Section belongs_to:user。我首先明白用戶和部分是多對多的。但是如果你想讓它們成爲一對多,請檢查PlanetMaster的答案。 – Faisal 2010-05-04 07:05:42