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は関連付けられたプロバイダーを削除せず、存在しないorganization_id を残します。これは奇妙な動作です。そこに nil があるか、プロバイダーが削除されることを期待しています (それが私がやりたいことです)。

推移的な関連付け has_many :products :through => :providers があることがわかりました - これがプロバイダーが削除されない理由なのだろうか。

助けてくれてありがとう

編集:

これは 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 に答える