我有以下型號: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
當我創建一個供應商(無產品)的組織,然後將其刪除與破壞:
Organization.find(1).destroy
的Rails 3.0。 x 不會刪除關聯的提供程序,使其不存在organization_id。這是奇怪的行爲,我希望無論在哪裏或提供者被刪除(這就是我想要做的)。
我看到有傳遞關聯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不會退出並出現錯誤。
您使用的是底層數據庫?你可以發佈調用'destroy'時運行的SQL嗎?模型看起來是正確的,更有可能這是與數據有關的... – PinnyM
PostgreSQL。我只看到:AREL(0.2ms)從「組織」刪除「組織」。「」id「= 4(並在下一行提交)。通過delayed_jobs刪除組織,但這並不重要。刪除SQL語句很簡單。順便說一句代碼是在這裏 - https://github.com/Katello/katello/blob/master/src/app/models/organization.rb – lzap
Btw刪除AR語句是:Organization.unscoped.find(123).destroy和它是在一個不同的過程中完成的。但是,當我從控制檯嘗試它時,我也一樣。 – lzap