2012-12-12 2 views
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 

레일 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 클래스에서 다음 확인란 삭제 된 한 하나. 어떤 이유로 레일스는 오류없이 종료하지 않습니다.

+0

사용중인 기본 데이터베이스는 무엇입니까? 그리고'destroy '를 호출 할 때 실행되는 SQL을 게시 할 수 있습니까? 모델이 정확 해 보입니다. 데이터와 관련된 것일 가능성이 높습니다. – PinnyM

+0

PostgreSQL. 나는 단지 이것을 본다 : AREL (0.2ms) "조직", "id"= 4 (그리고 다음 줄의 COMMIT) "조직"에서 삭제한다. 조직은 delayed_jobs를 통해 제거되지만 중요하지는 않습니다. 삭제 SQL 문은 간단합니다. Btw 코드가 여기에 있습니다 - https://github.com/Katello/katello/blob/master/src/app/models/organization.rb – lzap

+0

Btw 삭제 AR 문은 다음과 같습니다 : Organization.unscoped.find (123) .destroy and 그것은 다른 과정에서 이루어집니다. 하지만 콘솔에서해볼 때도 똑같습니다. – lzap

답변

1

시도해 볼 수있는 것은 : dependent = : destroy, to : dependent => : delete를 변경하는 것입니다. 공급자가 삭제되는지 확인하십시오. 그들이 그렇게한다면, 당신의 코드를 가지고 뭔가를 삭제할 수 있습니다.

+0

여기에 오신 것을 환영합니다 ... – lzap