Rails: Храните изменения в объектах / ассоциациях в памяти без сохранения в базе данных. - PullRequest
0 голосов
/ 30 июля 2010

У меня есть модель Rails с различными атрибутами и отношениями has_many с другими моделями. В представлении я хочу, чтобы пользователь мог вводить / изменять значения, которые будут изменять значения в загруженном объекте и возвращать результаты, рассчитанные по ним, всякий раз, когда они вносят изменения. Однако я не хочу, чтобы значения изменялись в базе данных, пока они не выберут «Сохранить». Проблема, с которой я сталкиваюсь, заключается в том, что переменные, которые я связываю с коллекциями, извлекаются из базы данных после каждого нового изменения. Поэтому, если я использую что-то вроде следующего:

@model.attributes = params[:model]

это длится продолжительность этого конкретного вызова модели, но в следующий раз, когда пользователь вносит изменение, коллекция перезагружается, теряя все предыдущие изменения, кроме самого последнего. Я пытался использовать переменную экземпляра, например:

@costs ||= self.costs

Но всякий раз, когда я запускаю на нем операцию, она перезагружается из базы данных, перезаписывая предыдущие изменения. Э.Г.

@costs[i].monthly = 10

Есть ли способ обеспечить сохранение изменений в течение сеанса без сохранения в базе данных? В данный момент мне кажется, что лучше всего создать отдельную модель для хранения значений, а затем сохранить их обратно в исходное, когда пользователь завершит работу.

Ответы [ 2 ]

1 голос
/ 30 июля 2010

Вы можете либо восстановить его в хэш params всякий раз, когда вносите изменение, либо попробовать использовать хеш session (но вам придется помнить, чтобы очистить его).

http://guides.rubyonrails.org/security.html#what-are-sessions

0 голосов
/ 03 ноября 2010

Короче говоря, данные не сохраняются между запросами. В то время у меня было впечатление, что атрибуты содержат значения для продолжительности сеанса. С тех пор я узнал, что единственное, что сохраняется, - это значения, хранящиеся в базе данных, и значения, передаваемые туда и обратно в параметрах и хэшах сеансов.

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