Применение областей в объединениях - PullRequest
0 голосов
/ 11 октября 2011

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

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 голосов
/ 11 октября 2011

Попробуйте использовать & следующим образом:

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

Я думаю, это называется интерполяцией.Он объединяет два запроса вместе, сохраняя первый запрос как base (он возвращает Category объектов).

...