У меня есть простое приложение для расчета стоимости работы по обрамлению фотографий. Пользователь вводит все данные в форму, а затем приложение вырабатывает котировку на основе этих данных.
Затем пользователя спрашивают, хотят ли они создать заказ из этой цитаты, и если они это сделают, пользователь выбирает или вводит нового клиента, чтобы связать этот заказ, и приложение создает заказ.
Как лучше всего сделать это в 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
Ответ 1 · рейтинг 1 · Matt
Я бы вообще не стал создавать объект из цитаты.
Я бы создал другое действие для расчета котировки, а затем, вероятно, использовал бы ajax для вызова этого каждый раз, когда какое-либо значение поля формы менялось. Отдельная кнопка и отдельное действие создавали бы порядок непосредственно из формы.
Ответ 2 · Max Williams
Не используйте сеанс ни для чего, кроме того, какой пользователь в данный момент вошел в систему в данном браузере. Думайте о сеансе как об удобстве, но не используйте его ни для чего критического, это действительно имело бы значение, если бы он был потерян. Кроме того, имейте в виду, что rails не имеет состояния, т.е. ничего не переносит в памяти от одного запроса к другому.
Я бы просто сделал форму для заказа на странице, которая показывает данные котировки, и заполнил бы соответствующие поля данными из цитаты, например, сколько это стоит, какой элемент заказа участвует или что-то еще.
Ответ 3 · Aaron Scruggs
Предпочтительный способ хранения данных сеанса в RoR - в хранилище файлов cookie. Магазин печенья не очень большой. По этой причине вы, вероятно, не захотите хранить в сеансе много данных.
Подумайте о том, чтобы позволить customer_id в заказах принимать значение NULL. Затем вы можете сохранить в хранилище файлов cookie хеш, например ":order_id => " . Это позволит вам запомнить, что выбрал анонимный пользователь, даже если он покинет сайт и вернется. Это также отлично подходит для измерения вашего коэффициента отсева в процессе регистрации (сколько людей получили предложение, а затем не вернулись).
Проблема с тем, чтобы не хранить эту информацию в базе данных, заключается в том, что это может позволить пользователю манипулировать этими данными после их ввода. Было бы плохо, если бы вы указали цену и оставили ее на странице.