2017-02-10 2 views
1

Я пытаюсь фильтровать список продуктов на основе 2-тегов,фильтра рельсы рекорда 2 экземпляров рекорда модели детской

class Product < ActiveRecord::Base 
    has_many :tags 
end 

class Tag < ActiveRecord::Base { 
      :id => :integer, 
    :created_at => :datetime, 
    :updated_at => :datetime, 
     :key => :string 
} 

Как форматировать оператор запроса, который позволяет мне найти продукт, который имеет 2 тега, один с ключевым «хрупким» и один с ключом «скоропортящийся»?

+0

Вы хотите, только если у него есть эти два тега? или даже с одним тегом –

+0

, только если у него есть оба тега –

+0

Используете ли вы postgresql? –

ответ

1
Product.joins(:tags).where("tags.key IN (?)", ['fragile', 'perishable']).group('products.id').having('COUNT(tags.id) = ?', 2) 
+0

спасибо! Это работает также с подсчетом products.id. –

+2

Более идиоматическим способом выражения 'WHERE ... IN' будет: ' '' ruby ​​ .where (теги: {ключ: ['хрупкий', 'скоропортящийся'}}) '' ' – bluehavana

Смежные вопросы