Ruby on Rails - 从报价创建订单

时间:2010-11-23 15:30:28

标签: ruby-on-rails session forms ruby-on-rails-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

3 个答案:

答案 0 :(得分:1)

我根本不会从报价中创建任何对象。

我会为计算引号创建一个不同的操作,然后可能会使用ajax在每次更改某个表单字段值时调用它。单独的按钮和单独的操作将直接从表单中创建订单。

答案 1 :(得分:0)

请勿在特定浏览器上将会话用于除用户登录之外的任何其他内容。将会话视为一种便利,但不要将它用于任何关键的事情,如果丢失则真的很重要。另外,请记住rails是无状态的,即从一个请求到下一个请求不会在内存中携带任何内容。

我只需要在页面上创建一个表单来显示报价数据,然后将相关字段填入报价中的数据,例如它是多少,涉及的订单项目,或者其他什么。

答案 2 :(得分:0)

在RoR中存储会话数据的首选方法是在cookie存储中。 cookie商店不是很大。出于这个原因,您可能不希望尝试在会话中存储大量数据。

考虑允许订单上的customer_id可以为空。然后,您可以在cookie存储中存储像“:order_id =>”这样的哈希值。这将允许您记住匿名用户选择的内容,即使他们离开网站并返回。这也非常适合在注册过程中测量您的损耗率(有多少人得到报价然后再也没有回来)。

未将此信息存储在数据库中的挑战是,它可以允许用户在输入数据后对其进行操作。如果您引用它们并将其保留在页面上,这将是不好的。