Как/где временно хранить объекты ActiveRecord если не на сессии?

Я осуществляю рефакторинг основанную на направляющих регистрационную заявку события, которая имеет процесс контроля, который поражает несколько моделей ActiveRecord. Идеально, объекты не должны быть сохранены, если контроль не завершен (оплата успешно обрабатывается). Я не совсем уверен, почему это была бы плохая вещь сериализировать эти объекты в сессию временно, но я считал много раз что ее плохое заклинание. По крайней мере, нет никакого риска выхода из синхронизации с существующими записями, поскольку не будет никаких существующих записей.

Мои вопросы:

A) Это все еще проблематично для хранения записей на сессии даже при том, что они не существуют в другом месте? Даже если я изменяю модель, разве я не могу уничтожить все существующие сессии?

B) Если это может вызвать проблемы, как я должен временно хранить объекты? Я должен сохранить их и использовать булев флаг для указания постоянный по сравнению с временным состоянием? Тогда крон сценарий для избавлений от устаревших временных объектов?

Мысли?

10
задан tacomachine 20 February 2010 в 08:20
поделиться

2 ответа

Почему бы вам не хранить их в базе данных, но так, чтобы вы знали, что они "неполные"?

Например, вы можете добавить поле added_to_cart_at с датой. Когда продукт добавляется в корзину, вы сохраняете запись и устанавливаете значение для этого поля. Затем, если пользователь завершает покупку, вы очищаете поле и связываете продукт с заказом.

Чтобы очистить устаревшие записи, можно настроить ежедневный cron для удаления всех записей, где added_to_cart_at старше, чем 1.day.ago.

5
ответ дан 4 December 2019 в 03:16
поделиться

Проблема их хранения в сеансе заключается в том, что у сеанса ограниченное пространство. Объекты ActiveRecord приносят много накладных расходов с точки зрения места при хранении в сеансе. Если вы храните записи с плотно заполненными отношениями has_many, у вас могут возникнуть проблемы.

Я считаю, что описание Симоне Карлетти хранения частичных записей в базе данных является лучшим решением.

Но, если вы действительно хотите хранить объекты в сеансе, сохраняйте минимально возможное количество информации. Например, только идентификаторы и обновленные поля. Также сохраните информацию в виде хэша вместо того, чтобы сохранять объект непосредственно в сеансе.

1
ответ дан 4 December 2019 в 03:16
поделиться
Другие вопросы по тегам:

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