1

我正在尝试在创建新记录之前检查具有完全相同关联的现有 InvitationSearch 记录(以避免有 2 条相同的记录),但我不知道如何执行此操作。

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

在我的invitation_searches_controller create 方法中,我想在创建新的InvitationSearch 之前检查匹配项。

在我的参数中,我得到了gender、brand_ids、category_ids 和size_ids,我只关心具有确切性别和相同关联ID 集的记录,不多不少。

我知道我可以执行以下操作,但这会返回包含任何这些品牌的所有记录,而不是确切的集合。另外,我需要对每个关联执行操作,这似乎相当乏味。

InvitationSearch.includes(:brands).where(:brands => {:id => params[:invitation_search][:brand_ids]})

提前致谢!

4

1 回答 1

0

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

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+,您可以使用更新的 syntax brad_id: brand_id

于 2012-06-09T00:57:13.257 回答