AR эквивалентно этим операторам SQL или как иначе использовать их в Rails?
Я хотел использовать драгоценный камень act_as_list, чтобы изменить порядок списков.
Но, похоже, он не обрабатывает более ограниченные запросы, чем основанные на ассоциации (я хочу упорядочить списки, основанные как на ассоциации, так и на объектах с логическим атрибутом, установленным в true
).
Если я не ошибаюсь, просматривая логи, кажется, что гем использует SQL-оператор, который обновляет много записей одновременно.
Я хотел бы использовать точно такие же операторы, чтобы учесть мой собственный код заказа.
Эти два следующих утверждения перемещают объект вопроса с позиции 3 на 8.
UPDATE "questions" SET position = (position - 1) WHERE ("questions"."question_list_id" = 2 AND position > 3 AND position <= 8)
UPDATE "questions" SET "position" = ?, "updated_at" = ? WHERE "questions"."id" = 55 [["position", 8], ["updated_at", "2014-06-09 14:40:47.545040"]]
Возможно ли с ActiveRecord или любым другим способом, и если да, то как, повторно использовать вышеуказанный код?
1 ответ
Вы можете смешивать SQL и ActiveRecord для достижения этих операторов SQL. Они могут быть написаны:
Question.where(question_list_id: 2, position: [4..8]).update_all('position = (position - 1)')
Question.update(55, position: 8)
Драгоценный камень act_as_list не отвечает за сортировку элементов, он просто сохраняет в БД положение элементов. Вы можете отсортировать элементы с помощью API, предоставленного act_as_list.
Также есть scope
вариант, если вы хотите нацелить только некоторые элементы. Смотрите источник.