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,世界又变得美好了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值