2016-05-24 5 views
1

Я строю небольшое приложение с Rails 4.2.6. Предположим, у меня есть следующие классы:Rails: переключатель HT Родитель дочерних объектов при удалении родителя?

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

В настоящее время, если я попытаюсь удалить Соц.работница, я получаю сообщение об ошибке:

Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails 

Нет проблем, что и следовало ожидать.

В некоторой CMSes, хотя, если пользователь попытки уничтожить объект с такими зависимостями, вы можете представить их с возможностью присвоить объекты другого родителя или уничтожить их. Есть ли стандартный способ в Rails предложить эту функциональность? В противном случае, похоже, мне нужно будет поставить в контроллере Caseworker before_destroy ... это правда? Я не боюсь написать такой метод, если это необходимо, но я бы предпочел не изобретать это колесо, если он где-то там.

ответ

2

Вы можете добавить один из dependent: :destroy или dependent: :nullify в оператор has_many, в зависимости от того, хотите ли вы, чтобы дети были удалены или чтобы их поле внешнего ключа было нулевым.

Например, чтобы удалить случаи, относящиеся к Соц.работнице удаляемым вы могли бы использовать:

class Caseworker < ActiveRecord::Base 
    has_many :cases, dependent: :destroy 
end 

Для моего Rails знаний не имеет возможностей переназначить ребенок к другому родителю - вам придется писать код сделать это самостоятельно.