Rob*_*Rob 45 model ruby-on-rails associations
我已经查看了Ruby on Rails指南,我似乎无法弄清楚如果有父级记录,如果有人删除父记录.例如.如果我的数据库有CUSTOMERS并且每个客户可以有多个ORDERS,我想阻止有人在数据库中有任何订单时删除客户.如果客户没有订单,他们应该只能删除客户.
在定义模型之间的关联以强制执行此行为时,有没有办法?
小智 100
class Customer < ActiveRecord::Base
has_many :orders, :dependent => :restrict # raises ActiveRecord::DeleteRestrictionError
Run Code Online (Sandbox Code Playgroud)
编辑:从Rails 4.1开始,:restrict
不是一个有效的选项,而是你应该使用:restrict_with_error
或:restrict_with_exception
例如.:
class Customer < ActiveRecord::Base
has_many :orders, :dependent => :restrict_with_error
Run Code Online (Sandbox Code Playgroud)
zet*_*tic 47
您可以在回调中执行此操作:
class Customer < ActiveRecord::Base
has_many :orders
before_destroy :check_for_orders
private
def check_for_orders
if orders.count > 0
errors.add_to_base("cannot delete customer while orders exist")
return false
end
end
end
Run Code Online (Sandbox Code Playgroud)
编辑
看到这个答案有一个更好的方法来做到这一点.
归档时间: |
|
查看次数: |
16287 次 |
最近记录: |