viktorvsk
@viktorvsk

Можно ли сгруппировать запрос по OR в WHERE с помощью Ransack?

Product.search(product_properties_property_id_eq: 'x', product_propertries_value_eq: 'y')

Ransack генерирует запрос, в котором что-то вроде:
WHERE (("product_properties"."value" = 'x' AND "product_properties"."property_id" = 'y'))

С помощью комбинатора можно поменять этот AND на OR, да:
WHERE (("product_properties"."value" = 'x' OR "product_properties"."property_id" = 'y'))

Но можно ли с помощью ransack составить запрос вроде:
WHERE(
( product_properties.value = 'x' AND product_properties.property_id = 'y' ) OR
( product_properties.value = 'x1' AND product_properties.property_id = 'y1' ) OR
( product_properties.value = 'x2' AND product_properties.property_id = 'y2' ) OR
)

Смысл - обычный фильтр товаров. Если это реализовано в Spree или ror-e, ткните, пожалуйста, т.к. все что там видел - немного другого плана, как мне показалось.
  • Вопрос задан
  • 2407 просмотров
Пригласить эксперта
Ответы на вопрос 1
recomp
@recomp
web developer
зачем тебе OR или Ransack для этого? используй скоупы в модели.
models/product.rb
def self.properties( properties ) # properties = [1, 2, 3]
    if properties.present?
      if properties.first == 'all'  # я делал себе для выборки товаров со всеми параметрами
         properties = Product_property.all.pluck(:property_id)
         where(property_id: properties)
      else
        where(property_id: properties) # WHERE .property_id IN (value1,value2,...);
      end
    end
  end


потом используй:

Product.properties(params[:properties])
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы