2012-05-28 5 views
0

У меня есть 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 удален, но Dresstype_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.

ответ

2
class Type < ActiveRecord::Base 
    has_many :dresses, :dependent => :nullify 
    ... 
end 

Не работает ли он?

+0

Да, это работает. Я не заметил вариант nullify при первом просмотре в Rails Guides. –

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