2010-07-15 40 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