私は次のモデルを持っています:
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 はエラーで終了しません。