ActiveRecord传递关联删除

时间:2012-12-12 18:15:53

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

我有以下型号:

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

当我使用提供程序(没有产品)创建组织,然后使用destroy:

删除它
Organization.find(1).destroy

Rails 3.0.x 删除关联的提供商,留下不存在的organization_id。这是奇怪的行为,我希望在那里删除nil或删除提供者(这就是我想要做的)。

我看到有传递关联has_many:products:through =&gt; :提供者 - 我想知道这是不是删除提供者的原因。

感谢您的帮助

编辑:

好的,这与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不会以错误退出。

1 个答案:

答案 0 :(得分:1)

您还可以尝试,将:dependent =:destroy,更改为:dependent =&gt; :删除。查看提供程序是否被删除。如果他们这样做,它可能与您的代码有关,以防止删除。