Задать вопрос
@vanderv
Ruby on Rails

[RoR] Как организовать итерацию в скоупе метода where?

scope :with_size_ids, lambda { |size_ids|
    sizes = Catalog::Size.find(size_ids)
    sizes.map do |size|
      where('product.size >= ? AND product.size <= ? ', size.max_from, size.max_to)
    end
  }

Есть база размеров, которая задает диапазон чисел (от и до). На входе скоуп получает массив id этих размеров. На выходе должна быть выборка подходящих под эти размеры записей.
По итогу запрос должен быть аналогичен такому:
where('product.size >= ? AND product.size <= ? ', 0, 100).where('product.size >= ? AND product.size <= ? ', 200, 300) # И так далее
  • Вопрос задан
  • 2442 просмотра
Подписаться 4 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Code Basics
    Ruby для начинающих
    1 месяц
    Далее
  • Skillbox
    Ruby on Rails с нуля
    10 месяцев
    Далее
  • Хекслет
    Разработчик на Ruby on Rails
    5 месяцев
    Далее
Решения вопроса 1
Vakiliy
@Vakiliy
Можно так:
scope :with_size_ids, lambda { |size_ids|
  sizes = Catalog::Size.where(id: size_ids).pluck(:max_from, :max_to)
  ranges = sizes.inject([]){|o, i| o << Range.new(*i)}
  where(size: ranges)
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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