Ruby/Rails - могу ли я использовать объединенную таблицу (или метод класса) как часть моего предложения WHERE?
Я хочу захватить все категории, которые содержат возможность покупки products
.
class Product < ActiveRecord::Base
belongs_to :category
scope :purchaseable, where(:available => true)
end
class Category < ActiveRecord::Base
has_many :products
scope :with_purchaseable_products, ?????
end
Итак, я пытаюсь определить :with_purchaseable_products
. Это работает:
scope :with_purchaseable_products, joins(:products).where("products.available is true").group(:id).having('count(products.id) > 0')
Но это не очень СУХОЙ. Можно ли применить область :purchaseable
к products
в моей области :with_purchaseable_products
?
Спасибо.
Ответы
Ответ 1
Вы должны использовать метод слияния
class Category < ActiveRecord::Base
has_many :products
scope :with_purchaseable_products, joins(:products).merge(Product.purchaseable).group(:id).having('count(products.id) > 0')
end
Подробнее о http://asciicasts.com/episodes/215-advanced-queries-in-rails-3