Rails如何创建多对多关系并保存创建它的人

时间:2017-07-14 09:33:46

标签: ruby-on-rails activerecord

我有3个模特

  • 用户
  • 公司
  • 标签

我想在UserTags之间创建多对多的关系,但我也想知道哪个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

但我不明白的是如何存储谁创建了这种关系,然后拉出了特定公司标记的所有用途。

我真的很感激你的帮助。

2 个答案:

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