我正在尝试检查现有的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创建方法中,我想在创建新的InvitationSearch之前检查匹配。
在我的参数中,我得到了gender,brand_ids,category_ids和size_ids,我只关心具有完全性别和相同的关联ID的记录,不多也不少。
我知道我可以执行以下操作,但这会返回包含任何这些品牌的所有记录,而不是确切的设置。另外,我需要对每个关联执行操作,看起来这样会很乏味。
InvitationSearch.includes(:brands).where(:brands => {:id => params[:invitation_search][:brand_ids]})
提前致谢!
答案 0 :(得分: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+,则可以使用较新的语法brad_id: brand_id
。