我有以下数据库结构。
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
我找到分配给该成员的类别。我需要选择那些未分配给该成员的类别。我怎样才能写一个范围来实现这个目标。
请提前告知,谢谢。
答案 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