如何在多对多轨道中找到未选择的项目4

时间:2013-11-19 05:52:16

标签: ruby-on-rails activerecord ruby-on-rails-4

我有以下数据库结构。

class Category < ActiveRecord::Base
  has_many :member_categories
  has_many :members, :through => :member_categories
end

class Member < ActiveRecord::Base
  has_many :member_categories
  has_many :categories, :through => :member_categories
end

class MemberCategory < ActiveRecord::Base
  self.table_name = "member_categories"
  belongs_to :member
  belongs_to :category
end

我可以获得任何成员类别作为以下声明

Member.first.categories

我找到分配给该成员的类别。我需要选择那些未分配给该成员的类别。我怎样才能写一个范围来实现这个目标。

请提前告知,谢谢。

1 个答案:

答案 0 :(得分:3)

这不适用于范围。只需编写一个方法来查找ID不在与给定成员关联的类别ID集合中的所有类别:

class Member
  has_many :member_categories
  has_many :categories, through: :member_categories

  def not_categories
    Category.where('id not in (?)', categories.pluck(:id))
  end
end