Применение областей в соединениях

У меня есть следующие модели:

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 объекты).

Другие вопросы по тегам