Применение областей в соединениях
У меня есть следующие модели:
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 ответ
Решение
Попробуйте использовать &
как это:
Category.joins(:offers, :items) & Item.default.where(:merchant_id => @merchant.id)
Я думаю, что это называется интерполяцией. Он объединяет два запроса, сохраняя первый в качестве базы (возвращает Category
объекты).