两个资源在rails中具有两种不同的关系

时间:2010-07-15 01:03:16

标签: ruby-on-rails associations relational

我是新手,并且有一种我无法理解的情况。

假设我有两个资源,用户和小部件。

用户可以使用小部件,但小部件也是用户创建的,并且应由创建它们的用户拥有。需要有用户使用小部件,用户拥有小部件。以下是我要找的内容吗?

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 个答案:

答案 0 :(得分: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。除此之外,你很好地设置了多对多关系。