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

Как отсортировать массив?

Есть массив
[#<ProductAttributeValue position: 5>,#<ProductAttributeValue position: 2>,#<ProductAttributeValue position: 4>,#<ProductAttributeValue position: 1>,#<ProductAttributeValue position: 3>]


ProductAttribute has_many ProductAttributeValue

Сделал кнопку, которая сортирует ProductAttributeValue по атрибуту position.

def sort_attributes
    ProductAttribute.all.map do |pa|
      a = ProductAttributeValue.where(product_attribute_id: pa.id).sort_by(&:position)
    end

    redirect_to product_attributes_path
end

Нажимаю кнопку, Код ничего не делает и в логах только

ProductAttributeValue Load (0.5ms)  SELECT "product_attribute_values".* FROM "product_attribute_values" WHERE "product_attribute_values"."product_attribute_id" = 1878
  ProductAttributeValue Load (0.5ms)  SELECT "product_attribute_values".* FROM "product_attribute_values" WHERE "product_attribute_values"."product_attribute_id" = 1771
  ProductAttributeValue Load (0.5ms)  SELECT "product_attribute_values".* FROM "product_attribute_values" WHERE "product_attribute_values"."product_attribute_id" = 2241
  ProductAttributeValue Load (0.5ms)  SELECT "product_attribute_values".* FROM "product_attribute_values" WHERE "product_attribute_values"."product_attribute_id" = 2242
  ProductAttributeValue Load (0.6ms)  SELECT "product_attribute_values".* FROM "product_attribute_values" WHERE "product_attribute_values"."product_attribute_id" = 2197


Хотя когда дебажжу, то вроде бы позиции меняются. т.е. получается массив с
[#<ProductAttributeValue position: 1>,#<ProductAttributeValue position: 2>,#<ProductAttributeValue position: 3>,#<ProductAttributeValue position: 4>,#<ProductAttributeValue position: 5>]


Запрос должен быть примерно таким, но эквивалент в ruby не могу составить:

ProductAttributeValue Load (0.9ms)  SELECT "product_attribute_values".* FROM "product_attribute_values" WHERE "product_attribute_values"."product_attribute_id" = 1651 ORDER BY "product_attribute_values"."position"
  SQL (44.9ms)  UPDATE "product_attribute_values" SET "position" = 0 WHERE "product_attribute_values"."id" = 7537
  SQL (9.2ms)  UPDATE "product_attribute_values" SET "position" = 1 WHERE "product_attribute_values"."id" = 7474
  SQL (9.3ms)  UPDATE "product_attribute_values" SET "position" = 2 WHERE "product_attribute_values"."id" = 7395
  SQL (9.1ms)  UPDATE "product_attribute_values" SET "position" = 3 WHERE "product_attribute_values"."id" = 7216
  SQL (9.5ms)  UPDATE "product_attribute_values" SET "position" = 4 WHERE "product_attribute_values"."id" = 7046
  • Вопрос задан
  • 169 просмотров
Подписаться 1 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 1
В вашем случае должен помочь .order
ProductAttributeValue.where(product_attribute_id: ProductAttribute.all.ids).order(:position)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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