Добавить параметры перед отправкой формы ROR

Можно ли добавить некоторые параметры перед отправкой формы?

Моя проблема в том, что мне нужно отправить идентификатор билета моему платежному контроллеру.

Можно отправить его через скрытое поле ввода, но есть ли другой безопасный способ добиться этого?

Любая помощь будет оценена.

Спасибо.

Процесс покупки билета 0) Выберите событие 1) Пользователь выбирает тип билета, который он хочет купить. 2) Пользователь добавляет свою личную информацию 3) Наконец, Checkout (платежный контроллер)


person Jorge Najera T    schedule 06.10.2012    source источник
comment
Будете ли вы отправлять всю форму одному контроллеру, а этот дополнительный параметр другому?   -  person Alcides Queiroz    schedule 06.10.2012
comment
Не совсем, я буду обрабатывать всю информацию по платежному контроллеру.   -  person Jorge Najera T    schedule 06.10.2012


Ответы (2)


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

Но помимо этого вы можете сохранить сгенерированный идентификатор заявки в сеансе и уничтожить после его использования.

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

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

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


Обновление:

Основываясь на вашем обновлении, я думаю, вам нужно поддерживать таблицу running_transactions.

Это будет иметь

  • event_id (указывая на выбранное событие)
  • ticket_type_id (указывает на тип билета, который хочет купить пользователь)
  • ticket_id (уникальный идентификатор, сгенерированный вашим алгоритмом)
  • person_details (указывая на данные, предоставленные пользователем)
  • и т. д. (может включать другую информацию, связанную со статусом платежа или транзакции)
  • id: уникальный идентификатор этой таблицы.

Теперь о запуске процесса покупки

  • Создайте запись running_transaction, которая будет почти пустой.
  • Сохраните идентификатор этой таблицы в сеансе. Таким образом, для каждого последующего запроса вы найдете соответствующую запись running_transaction по этому идентификатору.
  • Эта запись будет обновляться дополнительными значениями на каждом этапе покупки билета. Например, после «шага 1» у вас будет идентификатор заявки.
  • В конце концов, когда билет будет успешно куплен и вы получите подтверждение оплаты, вы отметите это running_transaction как completed.

Вероятно, у вас уже есть что-то для отслеживания этой информации, так что вы можете использовать описанный выше способ и в этой таблице. Возможно, вы найдете лучшие имена, чем я предоставил :)

person Samiron    schedule 06.10.2012
comment
На самом деле билет не создается до тех пор, пока не будет произведен платеж, поэтому я действительно не знаю, как объединить эти параметры, чтобы не потерять идентификатор события и идентификатор билета. Моей первой мыслью было сделать это с помощью скрытых полей, но я не хочу, чтобы пользователь мог взломать эти значения. Значит, будет безопаснее добавить его в его текущую сессию? - person Jorge Najera T; 06.10.2012
comment
Спасибо за ваши комментарии! Теперь у меня есть более четкое представление о том, как это сделать, но я думаю, что сделать откат всего (чтобы не получить мусор в моей базе данных) будет довольно сложно, если пользователь уйдет до завершения транзакции. - person Jorge Najera T; 08.10.2012
comment
это просто... во-первых, вам нужно убедиться, что процесс покупки билетов должен быть завершен в течение определенного периода времени. Скажем, один час или один день, как вам больше нравится. Используйте для этого столбец меток времени. Теперь может запуститься задание cron, которое очистит все транзакции, которые не завершены, а срок истек. - person Samiron; 08.10.2012
comment
Спасибо! проведя некоторое расследование, я нашел драгоценный камень всякий раз, и я думаю, что с этим можно будет запланировать откат. - person Jorge Najera T; 08.10.2012

Я сделал это в приложении, которое у меня есть.

<td><%= @competencys[index].name %></td>
<%= f.hidden_field :student_id %>
<td>
  <%= f.radio_button :score, '4' %>
  <%= f.hidden_field :rating_id, :value => @competencys[index].ratings[0].id %>
  <%= @competencys[index].ratings[0].description %>
</td>

Это может быть немного сложно для понимания, но в данном случае я создаю результат, который имеет поле student_id и поле rating_id. В случае student_id это поле уже связано с символом :student_id (от контроллера), поэтому я просто назначаю его «под одеялом» с f.hidden_field

В случае с rating_id я не смог назначить его в контроллере, и мне нужно было сделать это "на лету", отсюда и код...

<%= f.hidden_field :rating_id, :value => @competencys[index].ratings[1].id %>

Итак, здесь вы можете видеть, что я использую этот символ :value для прямого присвоения rating_id в представлении. Не уверен, что это поможет, но решил поделиться. Удачи!

person Mark Locklear    schedule 07.10.2012