为什么在 运行 自定义 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 的回答,作为评论发布。)
我正在编写一个 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 的回答,作为评论发布。)