2012-05-28 67 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) 

我不明白为什么它设置在最后UPDATE命令type_id = 0但在此之前,它是在DELETE命令正确设置。

回答

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

它不工作?

+0

是的,这个工程。我第一次浏览Rails指南时没有注意到无效选项。 –