У меня есть Type has_many Dresses
. В таблице Dress
у меня есть столбец type_id
, который ссылается на модель Type
. Я хочу, чтобы всякий раз, когда объект Type
удален, все связанные объекты Dress
будут обновлять свои type_id
до nil
.Обновление сиротских записей в Rails
До сих пор, я попробовал это в консоли, и она работает:
> Dress.where(type_id: 3).update_all(type_id: nil)
Однако, когда я перевести его в TypesController
, как это:
def destroy
type_id = params[:id]
if Type.find(type_id).destroy
Dress.where(:type_id => type_id).update_all(:type_id => nil)
redirect_to admins_path
end
end
... и попробовать его в браузер, объект Type
удален, но Dress
type_id
не был обновлен.
Это выход журнала:
DELETE FROM "types" WHERE "types"."id" = $1 [["id", 3]]
UPDATE "types" SET position = (position - 1) WHERE (1 = 1 AND position > 2)
COMMIT
UPDATE "dresses" SET "type_id" = NULL WHERE "dresses"."id"
IN (SELECT "dresses"."id" FROM "dresses" WHERE "dresses"."type_id" = 0)
Я не понимаю, почему она устанавливает type_id = 0
в последней UPDATE
команде, но до того, что он был правильно установлен в команде DELETE
.
Да, это работает. Я не заметил вариант nullify при первом просмотре в Rails Guides. –