Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Ruby on Rails - создание заказа из предложения

Автор вопроса: freshestОтветов: 3

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

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

Как лучше всего сделать это в Ruby on Rails, сохранить ли данные формы в сеанс, а затем использовать этот сеанс для создания заказа, если пользователь решит создать заказ из котировки?

Вот соответствующая схема:

create_table "orders", :force => true do |t|
  t.string   "status"
  t.integer  "customer_id"
  t.datetime "created_at"
  t.datetime "updated_at"
end

create_table "order_items", :force => true do |t|
  t.integer "order_id"
  t.integer "height"
  t.integer "width"
  t.string  "mount"
  t.integer "mount_width"
  t.string  "moulding_1"
  t.string  "moulding_2"
  t.string  "moulding_3"
  t.boolean "glass"
  t.boolean "backing_board"
end

create_table "customers", :force => true do |t|
  t.string   "name"
  t.string   "address"
  t.string   "tel_number"
  t.string   "email_address"
  t.datetime "created_at"
  t.datetime "updated_at"
end

ruby-on-railsformssessionruby-on-rails-3

Ответы

Ответ 1 · рейтинг 1 · Matt

Я бы вообще не стал создавать объект из цитаты.

Я бы создал другое действие для расчета котировки, а затем, вероятно, использовал бы ajax для вызова этого каждый раз, когда какое-либо значение поля формы менялось. Отдельная кнопка и отдельное действие создавали бы порядок непосредственно из формы.

Ответ 2 · Max Williams

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

Я бы просто сделал форму для заказа на странице, которая показывает данные котировки, и заполнил бы соответствующие поля данными из цитаты, например, сколько это стоит, какой элемент заказа участвует или что-то еще.

Ответ 3 · Aaron Scruggs

Предпочтительный способ хранения данных сеанса в RoR - в хранилище файлов cookie. Магазин печенья не очень большой. По этой причине вы, вероятно, не захотите хранить в сеансе много данных.

Подумайте о том, чтобы позволить customer_id в заказах принимать значение NULL. Затем вы можете сохранить в хранилище файлов cookie хеш, например ":order_id => " . Это позволит вам запомнить, что выбрал анонимный пользователь, даже если он покинет сайт и вернется. Это также отлично подходит для измерения вашего коэффициента отсева в процессе регистрации (сколько людей получили предложение, а затем не вернулись).

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы