首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Ruby on Rails 開發從頭來(十二):訂單儲存與驗證實作

     編輯:Java 相關知識

結帳表單送出處理

# store_controller.rb
def save_order
  @cart = find_cart
  @order = Order.new(params[:order])
  @order.line_items << @cart.items
  
  if @order.save
    @cart.empty!
    redirect_to_index('Thank you for your order')
  else
    render :action => 'checkout'
  end
end

關鍵步驟

  1. 建立訂單物件,綁定表單參數
  2. 將購物車商品項目關聯到訂單(line_items 關聯)
  3. 儲存訂單(觸發驗證、回呼、資料庫交易)
  4. 成功:清空購物車、導向首頁並顯示感謝訊息
  5. 失敗:重渲染結帳頁,保留用戶輸入與錯誤訊息

訂單模型驗證

# order.rb
class Order < ActiveRecord::Base
  has_many :line_items
  validates_presence_of :name, :email, :address, :pay_type
  # ...
end

必填欄位驗證,失敗時 @order.errors 記錄錯誤詳情。

結帳視圖顯示錯誤

<%= error_messages_for("order") %>
<%= stylesheet_link_tag "scaffold", "depot", :media => "all" %>

error_messages_for 自動產生錯誤摘要清單,樣式可透過 CSS 客製化。

測試驗證流程

  1. 進入結帳頁,留空必填欄位送出
  2. 頁面重渲染,頂部顯示紅色錯誤訊息:
    "Name can't be blank", "Email can't be blank", ...
  3. 填寫完整資料送出
  4. 導向首頁,顯示 "Thank you for your order."
  5. 點擊 "Show my cart" 確認購物車已清空
  6. 資料庫 orders、line_items 表各新增一筆記錄

資料庫關聯結構

# orders 表
id, name, email, address, pay_type, shipped_at

# line_items 表
id, order_id, product_id, quantity, unit_price

@order.line_items << @cart.items 自動設定 order_id 外鍵並建立關聯記錄。

優化建議

  • 使用交易區塊 Order.transaction { ... } 確保訂單與明細原子性(Rails save 已內建)
  • 加入付款處理邏輯(信用卡授權、PayPal 整合)於 save_order 中
  • 發送確認郵件(OrderMailer.deliver_confirmation(@order))
  • 記錄訂單建立審計軌跡(OrderLog.create(:order => @order, :action => 'created'))
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved