为什么.save在运行自定义rake任务时会无声地失败?

时间:2015-04-21 13:49:01

标签: ruby-on-rails ruby ruby-on-rails-4 gsub rake-task

我正在编写一个rake任务,它可以改变名为Update的模型中的每条记录。出于某种原因,即使save(或save!)返回true,记录也不会保存到数据库中。

我只是使用一条记录(Update.last)对其进行测试,以尝试确定问题。因此,我使用u = Update.last进行记录,修改它,然后使用binding.pry尝试找出正在发生的事情。

这是我在pry中的行为:

pry(main)> Update.last
=> #<Update id: 598, ..., interesting_attribute: "old text">
pry(main)> u
=> #<Update id: 598, ..., interesting_attribute: "new text">
pry(main)> u.save
=> true
pry(main)> u.save!
=> true
pry(main)> Update.last
=> #<Update id: 598, ..., interesting_attribute: "old text">
pry(main)> u
=> #<Update id: 598, ..., interesting_attribute: "new text">

我不明白为什么在Update.last报告成功后save没有更新。那是为什么?

编辑:

使用以下内容更改属性本身:

u.interesting_attribute.gsub! 'old', 'new'

1 个答案:

答案 0 :(得分:2)

不要使用像gsub这样的爆炸方法!更改Rails对象的属性。

interesting_attribute是一种方法。 gsub!只是更改返回的值,而不是更改属性。请尝试分配:

u.interesting_attribute = u.interesting_attribute.gsub 'old', 'new'

(感谢Satya的回答,发表评论。)