Допустим, у меня есть Item
модель и Category
модель с has_many :through
ассоциации:Rails - нетерпеливый has_many нагрузки: через с условием об ассоциации
class Item < ActiveRecord::Base
has_many :category_items
has_many :categories, through: category_items
end
class Category < ActiveRecord::Base
has_many :category_items
has_many :items, through: category_items
end
class CategoryItems < ActiveRecord::Base
belongs_to :category
belongs_to :items
end
теперь, я хочу, чтобы иметь объем по пунктам, которые будут получать все элементы которые имеют определенный статус (предположим, что он имеет атрибут статуса) для конкретной категории. например: получить все элементы со статусом «на складе» и который относится к категории с id = 3, что-то вроде: scope :in_stock_for_category, ->(category) { where(status: SOME_ENUMERATED_VALUE) ....
Мне не хватает последней части запроса, чтобы ограничить набор результатов определенной категорией.
Спасибо!
Большое спасибо! отличный ответ. –
BTW - это 'group (" items.id ")' требуется здесь? Какова цель этого? –
После 'joins' может быть несколько строк, которые имеют один и тот же элемент, потому что элемент может иметь много категорий. Сгруппировав результаты с помощью 'items.id', вы гарантируете, что вы получите один элемент за строку. – Humza