Rails:如果调用两次,save不会更新记录?

时间:2012-05-24 01:02:54

标签: ruby-on-rails activerecord

使用rails控制台我创建了一个Model记录,然后使用一个新变量进行检索并更新了一些字段:

var = MyModel.new
var.name = "my name"
var.save

var2 = MyModel.last
var2.name = "your name"
var2.save

现在返回旧变量var.save只返回true,并且不会将name字段覆盖为其值:"my name"

为什么?

1 个答案:

答案 0 :(得分:3)

Rails模型默认为'Dirty',这意味着属性设置函数attribute=()将属性标记为已更改,并告知Rails在下次保存时更新此属性。此信息存储在模型上,而不是存储在数据库中。在var.save上,Rails仅更新它知道已更改的属性。如果Rails认为没有任何变化(在生产环境中这将非常慢),Rails不会检查数据库是否存在差异。

您可以使用var.reload将数据库中的属性重新加载到相应的对象中。

编辑:为了澄清上面的评论,您应该在测试代码中使用MyModel.last而不是MyModel.first。如果您的数据库中有多行,MyModel.first将不会引用最近保存的对象,因此var2var将引用完全不同的对象。