2010-11-23 6 views
0

私は単純なアプリケーションを使って、画像フレーミングジョブの見積もりを計算しています。ユーザーはすべてのデータをフォームに入力し、アプリケーションはこのデータに基づいて見積もりを実行します。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 

答えて

1

私は見積もりから全くオブジェクトを作成しません。

私は、見積もりを計算するために別のアクションを作成し、フォームフィールドの値が変更されるたびにそれを呼び出すためにおそらくajaxを使用します。別のボタンと別のアクションを使用すると、フォームから直接注文が作成されます。

0

ユーザーが指定したブラウザ上で一瞬にログインしている他のどのよりも、何のためにセッションを使用しないでください:ここで

は、関連するスキーマです。セッションは便宜的だと考えてください。しかし、それが紛失してしまった場合には、本当に重要なことは何もしないでください。また、レールはステートレスであることに注意してください。つまり、あるリクエストから次のリクエストまでメモリに何も格納されません。

私はちょうど見積もりデータを表示するページ上で注文するためのフォームを作成し、見積もりからのデータを関連フィールドに埋め込みます。どのくらいあるか、どのような注文アイテムが関わっているかなど。

0

セッションデータをRoRに保存する好ましい方法は、Cookieストアにあります。クッキーストアはあまり大きくありません。そのため、セッションに多くのデータを格納しようとは思わないでしょう。

オーダーのcustomer_idにnullを許可することを検討してください。次に、 ":order_id =>"のようなハッシュをクッキーストアに格納することができます。これにより、匿名ユーザーがサイトを離れて戻ってきた場合でも、匿名ユーザーが選択した内容を覚えておくことができます。これはまた、申し込みプロセス中にあなたの喪失率を測定することができます(何人の人が見積もりを取得したのですか?)。

この情報をデータベースに保存しないと、ユーザーが入力した後でこのデータを操作できる可能性があります。これは、価格を引用してページに残しておくと悪いことになります。

+0

確かにこのアプローチは、データベース内の孤立した注文アイテムをもたらすでしょうか? – freshest

+0

はい、それは重要ですか?あなたは、ファンネルに関する強力な情報を交換します。あなたの衰退率(何人が注文を作成し、それを購入する前に離れるか)を知ることは、ビジネス分析の観点からは非常に貴重な情報です。さらに、あなたのデータベースに多くの悩みがあることを心配している場合は、古い孤児を頻繁に削除するクリーンアップワーカーを実行してください。 –

関連する問題