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