2010-07-15 41 views
1

我是新來的鐵軌,並且有一種情況,我無法完全擺脫困境。有兩種不同軌道關係的兩種資源

可以說我有兩個資源,用戶和小部件。

用戶可以使用小部件,但小部件也是用戶創建的,應該由創建它們的用戶擁有。需要有用戶使用小部件,並且用戶擁有小部件。以下是我在找什麼?

Class User < ActiveRecord::Base 
    has_many :uses 
    has_many :widgets, :through => :uses 
    has_many :owns 
    has_many :widgets, :through => :owns 
end 

Class Widget < ActiveRecord::Base 
    has_one :own 
    has_many :uses 
    has_many :users, :through => :uses 
end 

Class Use < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :widget 
end 

Class Own < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :widget 
end 

回答

1

我會做一點點不同。

Class User < ActiveRecord::Base 
    has_many :uses 
    has_many :widgets, :through => :uses 
    has_many :owned_widgets, :class_name => "Widget" 
end 

Class Widget < ActiveRecord::Base 
    belongs_to :owner, :class_name => "User" 
    has_many :uses 
    has_many :users, :through => :uses 
end 

Class Use < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :widget 
end 

我改了一下,你對widget名稱衝突的名字,你不能有兩個協會的名稱相同。我也刪除了has_one,並設置了一個owner,它的外鍵爲owner_id,類別設置爲User。除此之外,您可以很好地設置多對多關係。

+0

我想我不能有相同的關聯,但不知道那個小的class_name善良。會嘗試一下。 – re5et 2010-07-15 03:33:50