更新Rails中的孤立记录

时间:2012-05-28 18:03:30

标签: ruby-on-rails ruby-on-rails-3 activerecord

我有Type has_many Dresses。在Dress表中,我有一个名为type_id的列,它引用了Type模型。我想要做的是,每当删除Type个对象时,所有关联的Dress对象都会将其type_id更新为nil

到目前为止,我在控制台中尝试了这个并且它可以工作:

> 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命令中正确设置。

1 个答案:

答案 0 :(得分:2)

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

不起作用吗?