程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Ruby on rails開發從頭來(windows)(九)-給購物車添加錯誤處理

Ruby on rails開發從頭來(windows)(九)-給購物車添加錯誤處理

編輯:關於JAVA

在上次的內容裡,我們演示了怎樣構建一個簡單的購物車,這次的內容非常簡單,給購物車添加錯誤處理。

對於Web系統來說,並發處理是一個無法回避的問題,我們來模仿一個並發沖突的情景:

1.用戶進入購物車頁面,看到共有5種商品。

2.管理員在後台維護商品列表,將5種商品中的一種刪除掉。

3.客戶選中被刪除掉的商品,添加到購物車。

在這種情況下,如果不作任何處理的話將會產生一個異常,而我們要作的,是處理這個異常,給用戶顯示一個商品不存在的錯誤提示。

1.首先我們需要修改StoreController的add_to_cart方法,下面是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

2.修改rails_apps\depot\app\views\store目錄下的index.rhtml文件:

在<div id="main">這一句的後面添加下面的代碼:

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

然後在按照前面提到的3個步驟模擬一個並發沖突的情形,就會在頁面上表示的錯誤信息了,如下圖:

下面回頭來看看前面的代碼:

在add_to_cart方法裡,我們使用了rescue代碼塊來進行異常處理,其中使用了Rails的logger來記錄異常,異常信息可以在\rails_apps\depot\log目錄下的development.log文件裡找到。

在記錄的異常後,使用了flash,這是一個類似於HashTable的對象,用來存儲鍵和對應的內容。Rails使用flash來處理異常。

我們使用flash[:notice] = 'Invalid product'來確定異常信息的內容,然後在頁面上表示出來,在index.rhtml的代碼裡進行flash內容的表示:

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

下面我們再添加一點處理,當用戶的購物車為空的時候,點擊Show My Cart鏈接會表示一個錯誤信息,提示用戶購物車為空:

還是StoreController,修改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