我有一个简单的User
& Account
模型。如果帐户附加了用户,我想阻止删除帐户。我创建了一个User
和一个Account
并将它们关联起来。然后,我在控制台上Account.find(x).destroy
。该帐户被销毁!
注意:
account_id
是正确的。Account.find(x).users.empty?
在控制台返回false
Account.find(x).destroyable?
在控制台返回true
users.empty?
def destroyable?
返回true
!!
醇>
我做错了什么?它是什么?
代码(Ruby 1.9.2-p290上的Rails 3.2.9):
class User < ActiveRecord::Base
belongs_to :account
end
class Account < ActiveRecord::Base
has_many :users, dependent: :destroy
attr_accessible :name
before_destroy :destroyable?
def destroyable?
if users.empty? # This returns true when called via callback.
true
else
false
end
end
end
答案 0 :(得分:7)
所以,事实证明这是另一个Rails的陷阱。
解决方案是将before_destroy
移到has_many
来电之上。
dependent: :restrict
代替dependent :destroy
,无需我的before_destroy
回调。
答案 1 :(得分:1)
我认为问题是dependent: :destroy
。如果您不想销毁具有关联用户的帐户,则不应添加从属选项。
这也是非常危险的,因为它可能会意外地摧毁用户。