Agile Web Development with Rails 3nd Edition學習筆記-錯誤處理

這一部分其實東西很少,這裏不做過多的描述,僅僅是記錄下來,以便今後查詢使用。
以add_to_cart方法爲例,當該方法收到一個錯誤的產品id時,會得到一個ActiveRecord::RecordNotFound錯誤。對應的包含錯誤處理的代碼如下:
def add_to_cart
product = Product.find(params[:id])
@cart = find_cart
@cart.add_product(product)
rescue ActiveRecord::RecordNotFound
logger.error("Attempt to access invalid product #{params[:id]}" )
flash[:notice] = "Invalid product"
redirect_to :action => 'index'
end

"rescue"的部分是捕獲錯誤並進行處理的代碼。這部分代碼的意義描述如下:
第一行:將出錯信息寫入Log文件
第二行:把出錯信息保存到flash對象中。這個對象以哈希的方式保存Error消息。並且這個對像被保存在Session中。我們可以在需要的時候從它裏面取出Error消息,顯示在用戶頁面上。
第三行:將頁面重定向到index頁面。

要將flash顯示在用戶頁面上,可採用如下的方法。
在depot/app/views/layouts/store.html.erb文件的<div id="main">...</div>節點開始部分加入如下代碼:
<% if flash[:notice] -%>
<div id="notice"><%= flash[:notice] %>
<% end -%>


啓動服務,在index頁面任意產品處點擊“Add to Cart”按鈕,顯示add_to_cart頁面後,把瀏覽器地址欄中的地址“http://localhost:3000/store/add_to_cart/<id>”修改爲“http://localhost:3000/store/add_to_cart/wibble”,點擊刷新。你將會看到頁面會自動回到index頁面,而不是出錯頁面。同時在index頁面中第一個產品之上會看到“Invalid product”的字樣。也就是我們在上面代碼中寫的Error消息的內容。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章