1

我是 Rails 新手,遇到了一种我无法完全理解的情况。

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

用户可以使用小部件,但小部件也是用户创建的,并且应该归创建它们的用户所有。需要有一个用户使用widget,并且一个用户拥有widget。以下是我要找的吗?

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
4

1 回答 1

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将具有 foreign_keyowner_id的类设置为User. 除此之外,您很好地设置了多对多关系。

于 2010-07-15T01:40:27.137 回答