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

Ruby on Rails 開發實戰(Windows 環境)第 9 篇:購物車錯誤處理與異常捕捉

     編輯:Java 相關知識

本篇針對購物車加入錯誤處理機制,模擬併發情境下商品被刪除後使用者仍嘗試加入購物車的情況,展示 Rails 如何優雅處理例外並回饋使用者。

併發衝突情境模擬

  1. 使用者進入購物車頁面,看到 5 種商品。
  2. 管理員在後台刪除其中一種商品。
  3. 使用者嘗試將已刪除的商品加入購物車。

若無例外處理,將拋出 ActiveRecord::RecordNotFound 導致 500 錯誤。我們透過 rescue 捕捉例外,記錄日誌並以 flash 顯示友善提示。

控制器修改:add_to_cart 加入例外處理

def add_to_cart
  product = Product.find(params[:id])
  @cart = find_cart
  @cart.add_product(product)
  redirect_to(:action => 'display_cart')
rescue
  logger.error("Attempt to access invalid product #{params[:id]}")
  flash[:notice] = 'Invalid product'
  redirect_to(:action => 'index')
end

logger.error 將錯誤寫入 log/development.log,flash[:notice] 則在下一個請求中可取得訊息。

視圖顯示 Flash 訊息

在 index.rhtml 的 <div id="main"> 後加入:

<% if @flash[:notice] -%>
  <div id="notice"><%= @flash[:notice] %></div>
<% end -%>

模擬上述步驟即可看到「Invalid product」提示(如下圖)。

補充:空購物車提示

修改 display_cart,當購物車為空時導向首頁並提示:

def display_cart
  @cart = find_cart
  @items = @cart.items
  if @items.empty?
    flash[:notice] = "Your cart is currently empty"
    redirect_to(:action => 'index')
  end
end

使用者未選商品直接點擊「Show My Cart」時將看到提示(如下圖)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved