Зависимый:: destroy не работает для отношения has_one - PullRequest
0 голосов
/ 20 июня 2019

Если я удаляю дочернюю запись, чтобы родительская запись не удалялась автоматически.

class User < ActiveRecord::Base
    has_one :agency, dependent: :destroy
    accepts_nested_attributes_for :agency 
end

class Agency < ActiveRecord::Base
    belongs_to :user
    accepts_nested_attributes_for :user
end

if @agency.present?
   @agency.user.destroy
   flash[:notice] = 'Agency Deleted'                  
end

Уничтожить дочернюю запись, чтобы родительская запись автоматически уничтожила.

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

Вы должны использовать следующий код для удаления пользователя и связанного с ним агентства без внесения каких-либо изменений в вашу модель.

class User < ActiveRecord::Base
    has_one :agency, dependent: :destroy
    accepts_nested_attributes_for :agency 
end

class Agency < ActiveRecord::Base
    belongs_to :user
    accepts_nested_attributes_for :user
end

if @agency.present?
   user = @agency.user #Change
   user.destroy # This will destroy both user and associated agency.
   flash[:notice] = 'Agency and User Deleted'                  
end

Полное официальное руководство по dependent: :destroy может бытьнайти здесь.

0 голосов
/ 20 июня 2019

Я думаю, ваши модели могут быть переписаны таким образом, чтобы получить ожидаемый результат.

class User < ActiveRecord::Base
    has_one :agency # Change
    accepts_nested_attributes_for :agency 
end

class Agency < ActiveRecord::Base
    belongs_to :user, dependent: :destroy # Change
    accepts_nested_attributes_for :user
end

if @agency.present?
   @agency.destroy # Change
   flash[:notice] = 'Agency Deleted'                  
end

Давайте теперь подумаем логически.

Что вы изменили, вы сделали User зависит от Agency, и теперь рельсы могут сформировать отношения родитель-потомок, чтобы получить принятый вывод.Поэтому, когда вы уничтожаете @agency, он также удаляет зависимую запись user.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...