我有以下模特:
class Category < ActiveRecord::Base
has_many :items
default_scope where(:enabled => true, :out_of_stock => false)
scope :enabled, where(:enabled => true)
scope :out_of_stock, where(:out_of_stock => true)
end
class Item < ActiveRecord:Base
belongs_to :category
end
我遇到了以下代码重复,在使用连接时重复整个项目的范围条件:
Category.joins(:offers).where(:items => {:merchant_id => @merchant.id, :enabled => true, :out_of_stock => false})
如果在连接中应用指定范围,那将是很好的:
Category.joins(:offers).where(:items => {:merchant_id => @merchant.id, :scope => :default})
答案 0 :(得分:0)
尝试使用&
,如下所示:
Category.joins(:offers, :items) & Item.default.where(:merchant_id => @merchant.id)
我认为这称为插值。它将两个查询连接在一起,将第一个查询保留为 base (它返回Category
个对象)。