我有一个简单的应用程序来计算图片框架作业的报价。用户将所有数据输入表单,然后应用程序根据此数据计算出报价。
然后询问用户是否要从该报价中创建订单,如果他们这样做,则用户选择或输入新客户以将该订单关联,并且应用程序创建订单。
在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
答案 0 :(得分:1)
我根本不会从报价中创建任何对象。
我会为计算引号创建一个不同的操作,然后可能会使用ajax在每次更改某个表单字段值时调用它。单独的按钮和单独的操作将直接从表单中创建订单。
答案 1 :(得分:0)
请勿在特定浏览器上将会话用于除用户登录之外的任何其他内容。将会话视为一种便利,但不要将它用于任何关键的事情,如果丢失则真的很重要。另外,请记住rails是无状态的,即从一个请求到下一个请求不会在内存中携带任何内容。
我只需要在页面上创建一个表单来显示报价数据,然后将相关字段填入报价中的数据,例如它是多少,涉及的订单项目,或者其他什么。
答案 2 :(得分:0)
在RoR中存储会话数据的首选方法是在cookie存储中。 cookie商店不是很大。出于这个原因,您可能不希望尝试在会话中存储大量数据。
考虑允许订单上的customer_id可以为空。然后,您可以在cookie存储中存储像“:order_id =>”这样的哈希值。这将允许您记住匿名用户选择的内容,即使他们离开网站并返回。这也非常适合在注册过程中测量您的损耗率(有多少人得到报价然后再也没有回来)。
未将此信息存储在数据库中的挑战是,它可以允许用户在输入数据后对其进行操作。如果您引用它们并将其保留在页面上,这将是不好的。