Задать вопрос
@andreychumak
junior

Как преобразовать массив в Relation?

Знаю что это неправильные действия изначально, но все же, другого выхода в моем случае не вижу.
Есть товары - модель Items(таблица items).
Цена на них строится динамически - модель PriceItems (таблицы нет).

Нужно сделать сортировку товаров по цене, делаю

@products.map do |product|
        price = @prices["#{product.make_name}-#{product.oem}"] #здесь получаю цену конкретного товара
        if price.present?
          [price.cost, product]
        end
      end


Получается такой массив:
[[6845, #<Product id: 1], [6345, #<Product id: 2], [4742, #<Product id: 3], [6045, #<Product id: 4]]

Дальше делаю
j = s.sort_by {|h| h[0]} # сортирую по цене
w = j.each {|el| el.delete_at(0)} # удаляю цену и получаю [[#<Product id: 3], [#<Product id: 4], [#<Product id: 2], [#<Product id: 1] ]
@sort_products = w.flatten #Получаю массив с объектами [#<Product id: 3, #<Product id: 4, #<Product id: 2, #<Product id: 1]


В общем получаю массив объектов, как его преобразовать в массив объектов ActiveRecord::Relation?

На самом деле я делаю Items.where(id: @sort_products.map(&:id)), но возвращает это AR:Relation отсортированный по id (т.е. вернулся к первоначальному состоянию)
  • Вопрос задан
  • 187 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 3
Dem1
@Dem1 Куратор тега Ruby on Rails
Ruby on Rails developer
Нельзя преобразовать array в ActiveRecord::Relation. Т.к Relation это build для SQL запроса.
Ответ написан
@Jowan
Строить цену динамически каждый раз - плохая идея, нужно сохранять такие вещи в БД.
Ответ написан
Комментировать
c3gdlk
@c3gdlk
Ментор в http://rubyboost.ru/
Сортировку Вам портит база, значит и решение нужно искать на уровне базы данных. Для постгреса выбирайте любое тут - https://stackoverflow.com/questions/866465/order-b...

Запрос придется построить динамически, но это не особо сложно.
Ответ написан
Ваш ответ на вопрос

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

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