Эквивалент .where без Query в before_save - Rails - PullRequest
0 голосов
/ 11 января 2019

У меня есть Invoice модель, которая accepts_nested_attributes_for :line_items с allow_destroy: true. В моей модели в обратном вызове before_save я могу ссылаться на данные следующим образом:

self.line_items

Некоторые элементы будут удалены при сохранении. Я хочу иметь возможность получать только те элементы, которые не будут удалены, например:

self.line_items.where(_destroy: false)

Однако это, очевидно, не сработает, поскольку я имею дело с несохраненным объектом. Итак, мой вопрос: как мне получить список элементов, которые не будут удалены? Я знаю, что могу технически перебрать список и добавить каждый применимый элемент в новый массив, но я думаю, что есть что-то более интуитивное. Например, в настоящее время я использую .sort_by(&:line_number) вместо SQL .sort(:line_number) для сортировки, что позволяет мне сортировать в памяти, а не из SQL. Мне нужно то же самое, за исключением пункта .where.

Заранее спасибо.

1 Ответ

0 голосов
/ 11 января 2019

Насколько я знаю, where специально предназначен для построения запросов SQL, поэтому вы не можете использовать его для работы с критериями в памяти, такими как, будет ли что-то уничтожено при сохранении. Для этого вы можете использовать методы в модуле Enumerable, который включен в объект коллекции. Вызов, упомянутый вами sort_by, использует этот модуль. В этом случае вы, вероятно, будете использовать line_items.reject(&:marked_for_destruction?). Подробнее см. Документацию для marked_for_destruction?.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...