我正在编写一个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'
答案 0 :(得分:2)
不要使用像gsub这样的爆炸方法!更改Rails对象的属性。
interesting_attribute
是一种方法。 gsub!
只是更改返回的值,而不是更改属性。请尝试分配:
u.interesting_attribute = u.interesting_attribute.gsub 'old', 'new'
(感谢Satya的回答,发表评论。)