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

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

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

Как лучше всего сделать это в 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

person freshest    schedule 23.11.2010    source источник


Ответы (3)


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

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

person Matt    schedule 23.11.2010

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

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

person Max Williams    schedule 23.11.2010

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

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

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

person Aaron Scruggs    schedule 23.11.2010
comment
Наверняка такой подход приведет к тому, что элемент заказа в базе данных окажется потерянным? - person freshest; 24.11.2010
comment
Да, но имеет ли это значение? В обмен вы получаете мощную информацию о вашей воронке. Знайте свой показатель убыли (сколько людей создают заказ и покидают его, прежде чем купить его) — очень ценная информация с точки зрения бизнес-аналитики. Кроме того, если вы беспокоитесь о большом количестве хлама в своей базе данных, просто запустите обработчик очистки, который очень часто удаляет старые потерянные файлы. - person Aaron Scruggs; 25.11.2010