我有以下模型:
class Organization < ActiveRecord::Base
has_many :providers, :dependent => :destroy
has_many :products, :through => :providers
end
class Provider < ActiveRecord::Base
belongs_to :organization
has_many :products, :inverse_of => :provider
end
class Product < ActiveRecord::Base
belongs_to :provider, :inverse_of => :products
end
当我创建一个具有提供者(并且没有产品)的组织,然后使用销毁将其删除时:
Organization.find(1).destroy
Rails 3.0.x不会删除相关的提供者,留下不存在的组织 ID。这是一种奇怪的行为,我希望那里要么 nil 要么删除提供者(这就是我想要做的)。
我看到有传递关联 has_many :products :through => :providers - 我想知道这是否是 provider 未被删除的原因。
谢谢你的帮助
编辑:
好的,这和Rails无关,我们在Provider类中进行了以下检查
def prevent_redhat_deletion
if redhat_provider?
errors.add(:base, _("Red Hat provider can not be deleted"))
return false
end
true
end
显然我正在删除一个redhat_provider。出于某种原因,Rails 不会因错误而退出。