Ruby on Rails与同一模型的多个关联

时间:2016-04-14 19:16:28

标签: ruby-on-rails activerecord

我有一个案例,每个用户都有很多项目,每个项目都有很多用户。 但是,我还想为每个用户分配一个主要项目。我无法弄清楚实现这一目标的最佳架构决策是什么。最后我希望能够致电:

User.primary_item

2 个答案:

答案 0 :(得分:2)

这听起来像是一个has_many_through关系。

class User
  has_many :owned_items
  has_many :items, through :owned_items
end

class Item
  has_many :owned_items
  has_many :users, through :owned_items
end

class OwnedItem
  belongs_to :items
  belongs_to :users
end

您可以在owned_item上拥有一个主要属性,而不是为primary_item建立单独的关系。

答案 1 :(得分:0)

根据所提供的信息,我说在两个模型上设置has_many through:关联。在User模型上,为primary_item_id添加一列,然后将scope添加到名为User的{​​{1}}模型中,该模型会获取该用户的主要项目。请注意,primary_item关联还需要您创建关联的联接表has_many through:

UserItems

这是class User < ActiveRecord::Base has_many :user_items has_many :items, through: :user_items scope :primary_item, -> { Item.find(self.primary_item_id) } end class UserItem < ActiveRecord::Base belongs_to :user belongs_to :item end class Item < ActiveRecord::Base has_many :user_items has_many :users, through: :user_items end 模型的相关信息。您还需要运行迁移以创建ActiveRecord表,并将UserItems列添加到primary_item_id表。请注意,您并未在此处随处使用Users