1

을 파괴, 다음 괜찮 았는데 : 레일/액티브는 레일 3.2.x에서 루프

class Engine < ActiveRecord::Base 
    has_one :car, dependent: :destroy 
end 
class Car < ActiveRecord::Base 
    belongs_to :engine, dependent: :destroy 
    belongs_to :owner 
end 
class Owner < ActiveRecord::Base 
    has_one :car, dependent: :destroy 
end 

내가 owner.destroy를 호출 할 경우

, 그것은 그 소유자, 그 자동차와 그 차의 엔진을 삭제합니다. 나는 Rails 4로 업그레이드했고 불행하게도 엔진과 자동차 사이에서 무한 루프를 반복했다. 차가 삭제 되려고 할 때 Rails는 먼저 엔진을 삭제하기 때문에 가정합니다. 그런 다음 엔진을 삭제하려고 할 때 Rails는 먼저 자동차를 삭제하려고합니다.

레일즈 4에서 어떻게 처리합니까? 나는 소유자를 삭제할 수 있기를 원하고 Rails/ActiveRecord는 자동으로 연관된 자동차와 엔진을 삭제합니다. 또는 엔진을 삭제할 수 있으며 Rails가 관련 자동차를 자동으로 삭제하며 그 반대의 경우도 마찬가지입니다.

답변

0

대신 dependent

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html 
http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/belongs_to 

이 당신을 도울 수 inverse_of를 사용해야합니다.

+1

'dependent' 대신'inverse_of'를 사용하면 Rails는 관련 모델을 삭제하는 것을 알고 있습니까? –

+0

예! 그렇습니다. 그것은 양방향으로 작동합니다. –

+0

안돼 :(, 작동하지 않습니다 ...하지만 일반적으로'inverse_of'를 사용해야합니다. –