Как / где временно хранить объекты ActiveRecord, если не в сессии? - PullRequest
10 голосов
/ 20 февраля 2010

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

Мои вопросы:

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

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

Мысли

Ответы [ 2 ]

5 голосов
/ 20 февраля 2010

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

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

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

1 голос
/ 20 февраля 2010

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

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

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

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