Basic Rails Вопрос: построение данных на нескольких страницах - PullRequest
3 голосов
/ 13 июня 2009

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

Примечание: я мог бы сохранить ActiveRecord в БД и затем получить его с идентификатором, который я храню в сеансе ... проблема в том, что ActiveRecord имеет несколько проверок, которые не позволяют сохранить его без всех данных. Я мог бы хранить сами параметры в сеансе или что-то в этом роде ... Должен быть стандартный способ сделать это ...

Ответы [ 2 ]

5 голосов
/ 14 июня 2009

Мы используем следующую схему, которая работает хорошо.

  1. Добавьте средство доступа к атрибуту wizard_stage в модель:

    attr_accessor: wizard_stage

  2. Добавьте скрытое поле: wizard_stage в форму для записи на каждой из страниц. Установите значение поля на что-то, что отражает то, что делает страница, например:

    f.hidden_field: wizard_stage,: value => 'contact_details'

  3. В проверке модели добавьте условие, подобное следующему:

    проверяет ...: if => lambda {| m | m.wizard_stage == 'contact_details'}

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

Обратите внимание, что это позволяет злоумышленнику обойти проверку, если он этого хочет, но в нашем случае (в большинстве случаев?) Это не имеет значения.

2 голосов
/ 13 июня 2009

Преобразуйте объект / ы в yaml, используя obj.to_yaml, и сохраните yaml в виде текста в БД (или даже в плоском файле). сохранить идентификатор в сеансе. перезагрузите его, когда это необходимо. obj.to_yaml сериализует объект без необходимости сохранения, пропуская проверки активных записей rails.

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