1

В Rails 3.2.x, следующие прекрасно работали:Rails/ActiveRecord зависимый уничтожить петлю

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 сначала пытается удалить свой автомобиль.

Как с этим справиться в Rails 4? Я хочу удалить владельца, а Rails/ActiveRecord автоматически удалит соответствующий автомобиль и движок. Или я могу удалить двигатель, и Rails автоматически удалит соответствующий автомобиль и наоборот.

ответ

0

Вы должны использовать inverse_of вместо dependent

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

Это может помочь вам.

+1

Если я использую 'inverse_of' вместо' dependency ', Rails знает, что нужно удалить связанные модели? –

+0

Да! оно делает. Он работает для обоих направлений. –

+0

Nope :(, не работает ... Но похоже, что я должен использовать 'inverse_of' вообще. –

Смежные вопросы