應用場景:
圖書分類和圖書,一對多關係。
我想實現當分類中還有所屬圖書,就不能讓使用者刪除分類。
我是這樣做的:
model中
class categroyhasbook***ception < runtimeerror;end
class bookcategory < activerecord::base
has_many :books, :dependent => :nullify
before_destroy :if_still_has_books
def if_still_has_books
raise categroyhasbook***ception unless self.books.blank?
end
控制器中
# 刪除圖書分類
def destroy
@book_category = bookcategory.find(params[:id])
@book_category.destroy
rescue categroyhasbook***ception
flash[:warn] = "圖書分類[#]中還有圖書,你不能刪除此分類"
else
flash[:notice] = "圖書分類[#]已刪除"
ensure
redirect_to :action => 'index'
end
上面的**和邏輯從表面上,是沒有問題的,還是現實是:圖書分類中有圖書存在,分類還是可以刪除,在if_still_has_books方法中self.books.blank?始終為true。
我左找右找上找下找,原來是has_many :books, :dependent => :nullify中的:dependent => :nullify引來了詭異,去掉:dependent => :nullify,世界又變得美好了。
Rails2的部分新特性
大多數常見的異常都可以統一處理,而不是每個需要單獨的處理。通常情況下,你只需要覆蓋rescue action in public方法,來進行統一的異常處理即可。但是你也有可能需要使用自己的case語句來處理特定場合的異常。因此我們現在提供了乙個類級別的巨集叫做rescue from,你可以使用它來宣...
Rails2的部分新特性
大多數常見的異常都可以統一處理,而不是每個需要單獨的處理。通常情況下,你只需要覆蓋rescue action in public方法,來進行統一的異常處理即可。但是你也有可能需要使用自己的case語句來處理特定場合的異常。因此我們現在提供了乙個類級別的巨集叫做rescue from,你可以使用它來宣...
Rails2的部分新特性
大多數常見的異常都可以統一處理,而不是每個需要單獨的處理。通常情況下,你只需要覆蓋rescue action in public方法,來進行統一的異常處理即可。但是你也有可能需要使用自己的case語句來處理特定場合的異常。因此我們現在提供了乙個類級別的巨集叫做rescue from,你可以使用它來宣...