Сделайте копию / клон активного объекта в ruby ​​и внесите в него изменения, не связываясь с базой данных. - PullRequest
0 голосов
/ 28 марта 2019

Я новичок в рубине. Я кодировал на многих языках, и обычно все получается быстро, если есть хорошая справка и все объясняется логически. Я схожу с ума. Я рассмотрел все возможные вопросы, связанные с этим, в stackoverflow, а также на других сайтах. Все говорят, что используют .clone или .dub или freeze и даже что-то вроде Marshal.load (Marshal.dump (arr)), но ничего из этого не работает.

Мне просто нужна копия исходного объекта, которую я могу изменить во время выполнения, не внося никаких изменений в базу данных.

Проект rails загружает кучу продуктов в объект, который затем вводится в выпадающий список. Допустим, это называется @products. Клиент хочет, чтобы я удалил определенные записи из раскрывающегося списка, но они НЕ должны быть удалены из базы данных.

Например, в php вы просто загружаете объект db в переменную и удаляете то, что вам не нужно, например, по id, а затем перебираете получившийся объект / массив, и это создает раскрывающийся список. Это не вносит изменений в базу данных.

Я очень быстро понял, Ruby так не работает, и он удаляет вещи прямо из базы данных, даже если я использую .clone или .dup.

Допустим, я использую tempproducts = @products и делаю что-то вроде tempproducts.delete (11), я не хочу, чтобы система тоже удаляла @products (11).

Это элементарная функция программирования, почему я не могу придумать, что сделать так просто?

Спасибо всем, кто может мне помочь с этим, или даже опубликовать ссылку на правильный ответ!

1 Ответ

3 голосов
/ 28 марта 2019

Оформление заказа Массив # выберите метод фильтрации коллекции записей

Например, скажем, ваша модель Product имеет один столбец shipping_category, и вы хотите показать только продукт с localи zonal категорий доставки, тогда это будет выглядеть как

@product.select { |p| p.shipping_category == 'local' || shipping_category == 'zonal' }

В идеале вы должны использовать https://guides.rubyonrails.org/active_record_querying.html для фильтрации данных на основе некоторых условий на уровне БД, используя whereметод активной записи.

...