在连接中应用范围

时间:2011-10-11 09:58:14

标签: ruby-on-rails-3 join finder

我有以下模特:

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})

1 个答案:

答案 0 :(得分:0)

尝试使用&,如下所示:

Category.joins(:offers, :items) & Item.default.where(:merchant_id => @merchant.id)

我认为这称为插值。它将两个查询连接在一起,将第一个查询保留为 base (它返回Category个对象)。