4

我有以下模型:

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 不会因错误而退出。

4

1 回答 1

1

您还可以尝试将 :dependent = :destroy 更改为 :dependent => :delete。查看提供程序是否被删除。如果他们这样做,则可能是您的代码阻止了删除。

于 2013-01-21T21:01:15.027 回答