为什么在 运行 自定义 rake 任务时 .save 会静默失败?

Why might .save fail silently while running a custom rake task?

我正在编写一个 rake 任务,该任务会更改名为 Update 的模型中的每条记录。由于某种原因,即使save(或save!)returns 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">

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

编辑:

属性本身更改为:

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

不要使用gsub之类的bang方法!更改 Rails 对象的属性。

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

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

(感谢 Satya 的回答,作为评论发布。)