Ruby on rails 通过关联ID查找具有精确集合的记录有很多

Ruby on rails 通过关联ID查找具有精确集合的记录有很多,ruby-on-rails,associations,Ruby On Rails,Associations,在创建一个新的邀请搜索记录之前,我试图检查现有的邀请搜索记录是否具有完全相同的关联,以避免出现两个相同的记录,但我不知道如何执行此操作 class InvitationSearch < ActiveRecord::Base has_many :invitations has_many :brands, :through => :invitation_search_brands has_many :invitation_search_brands has_many :c

在创建一个新的邀请搜索记录之前,我试图检查现有的邀请搜索记录是否具有完全相同的关联,以避免出现两个相同的记录,但我不知道如何执行此操作

class InvitationSearch < ActiveRecord::Base
  has_many :invitations
  has_many :brands, :through => :invitation_search_brands
  has_many :invitation_search_brands
  has_many :categories, :through => :invitation_search_categories
  has_many :invitation_search_categories
  has_many :sizes, :through => :invitation_search_sizes
  has_many :invitation_search_sizes
end

class Invitation < ActiveRecord::Base
  belongs_to :invitation_search
end

class InvitationSearchSize < ActiveRecord::Base
  belongs_to :invitation_search
  belongs_to :size  
end

class InvitationSearchBrand < ActiveRecord::Base
  belongs_to :invitation_search
  belongs_to :brand
end

class InvitationSearchCategory < ActiveRecord::Base
  belongs_to :invitation_search
  belongs_to :category
end

提前谢谢

这看起来仍然很糟糕,但这是你想要回报的吗

InvitationSearch.includes(:brands)
  .where(:brands => {:id => params[:invitation_search][:brand_ids]})
  .select { |i_s| i_s.brands.count == params[:invitation_search][:brand_ids].count }
第二次尝试:

q = InvitationSearch.includes(:brands)
params[:invitation_search][:brand_ids].each do |brand_id|
  q = q.where(:brand_id => brand_id)
end

还是第二次尝试,如果您使用的是ruby 1.9.2+,则可以使用更新的语法brad_id:brand_id。

谢谢您的帮助!是的,或多或少,我只是想知道计数是否足够。例如,如果我的params[:brand_id]返回[1,3,5],并且第一个查询返回包含这些id中任何一个的所有记录,那么计数是否可能返回带有brand_id(例如[1,2,6])的记录。现在呢?编辑:你知道吗,也许我现在太累了,不能做这个了
q = InvitationSearch.includes(:brands)
params[:invitation_search][:brand_ids].each do |brand_id|
  q = q.where(:brand_id => brand_id)
end