나는 다음과 같은 모델이 : 나는 공급자 (없이 제품)와 조직을 만든 다음 삭제하면액티브 전이 협회 삭제
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
레일 3.0. x 은 존재하지 않는 organization_id를 남겨 두는 관련 제공자를 삭제하지 않습니다 (). 이것은 이상한 행동이며, 거기에 아무 것도 없거나 제공자가 삭제 될 것으로 기대합니다 (그것이 내가하고 싶은 것입니다).
전이 연관 has_many가 있습니다. products : through => : providers - 공급자가 삭제되지 않은 이유가 궁금합니다. 어떤 도움
덕분에
편집 :
확인이 레일 함께 할 수 없다, 우리는
def prevent_redhat_deletion
if redhat_provider?
errors.add(:base, _("Red Hat provider can not be deleted"))
return false
end
true
end
분명히 내가이 redhat_provider을 Provider 클래스에서 다음 확인란 삭제 된 한 하나. 어떤 이유로 레일스는 오류없이 종료하지 않습니다.
사용중인 기본 데이터베이스는 무엇입니까? 그리고'destroy '를 호출 할 때 실행되는 SQL을 게시 할 수 있습니까? 모델이 정확 해 보입니다. 데이터와 관련된 것일 가능성이 높습니다. – PinnyM
PostgreSQL. 나는 단지 이것을 본다 : AREL (0.2ms) "조직", "id"= 4 (그리고 다음 줄의 COMMIT) "조직"에서 삭제한다. 조직은 delayed_jobs를 통해 제거되지만 중요하지는 않습니다. 삭제 SQL 문은 간단합니다. Btw 코드가 여기에 있습니다 - https://github.com/Katello/katello/blob/master/src/app/models/organization.rb – lzap
Btw 삭제 AR 문은 다음과 같습니다 : Organization.unscoped.find (123) .destroy and 그것은 다른 과정에서 이루어집니다. 하지만 콘솔에서해볼 때도 똑같습니다. – lzap