我有3个模特
我想在User
和Tags
之间创建多对多的关系,但我也想知道哪个Company
创建了这种关系,以便在数据库中搜索用户时通过标签,系统仅在公司指定的标签中进行搜索。
我知道如何创建一个has_many关系
User
has_many: tags, through: :user_tags
has_many: user_tags
Tag
has_many: users, through: :user_tags
has_many: user_tags
UserTag
belongs_to: user
belongs_to: tag
但我不明白的是如何存储谁创建了这种关系,然后拉出了特定公司标记的所有用途。
我真的很感激你的帮助。
答案 0 :(得分:1)
您可以将company_id字段添加到UserTag模型,以表示创建此条目的公司。 然后,对于您的查询'当通过标签在数据库中搜索用户时,系统仅在公司指定的标签中搜索
required_tag_id = assign_required_tag_id
required_company_id = assign_required_company_id
user_ids = UserTag.where(tag_id:required_tag_id).where(company_id:required_company_id).pluck(:user_id)
users = User.where(id:user_ids)
答案 1 :(得分:1)
希望这可以帮助你
Class User < ActiveRecord::Base
has_many: tags, through: :user_tags
has_many: user_tags
Class Tag < ActiveRecord::Base
has_many: users, through: :user_tags
has_many: user_tags
end
Class UserTag < ActiveRecord::Base
belongs_to: user
belongs_to: tag
belongs_to :company
before_save :set_company
private
def set_company
self.company = "your logic for associating the company"
end
end
#migration for user_tags
create_table :user_tags do |t|
t.references :user
t.references :company
t.references :tag
end
for fetching users tagged with a specific tag by a specific company
UserTag.where(company_id: 'the company id', tag_id: 'the tag id').users