Rails2中的诡异(1)

应用场景:
图书分类和图书,一对多关系。
我想实现当分类中还有所属图书,就不能让用户删除分类。

我是这样做的:

Model中
class CategroyHasBooksException < RuntimeError;end
class BookCategory < ActiveRecord::Base
has_many :books, :dependent => :nullify
before_destroy :if_still_has_books

def if_still_has_books
  raise CategroyHasBooksException unless self.books.blank?
end


控制器中
  # 删除图书分类
  def destroy
    @book_category = BookCategory.find(params[:id])
    @book_category.destroy
  rescue CategroyHasBooksException
    flash[:warn] = "图书分类[#{@group_category.name}]中还有图书,你不能删除此分类"
  else
    flash[:notice] = "图书分类[#{@group_category.name}]已删除"      
  ensure
    redirect_to :action => 'index'
  end


上面的代码和逻辑从表面上,是没有问题的,还是现实是:图书分类中有图书存在,分类还是可以删除,在if_still_has_books方法中self.books.blank?始终为true。

我左找右找上找下找,原来是has_many :books, :dependent => :nullify中的:dependent => :nullify引来了诡异,去掉:dependent => :nullify,世界又变得美好了。

你可能感兴趣的:(Flash,Ruby,ActiveRecord)