【发布时间】:2015-04-21 13:49:00
【问题描述】:
我正在编写一个 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">
我不明白为什么在save 报告成功后Update.last 没有更新。这是为什么呢?
编辑:
属性本身通过以下方式更改:
u.interesting_attribute.gsub! 'old', 'new'
【问题讨论】:
-
控制台里没改,数据库里改了吗? Update.find(598) 返回什么?
-
不,它在数据库中没有改变。
Update.find(598)返回与Update.last相同的内容(即未修改的版本)。 -
如何更改属性?我认为我们需要查看更多代码。一些
before_save回调可能有问题。 -
我添加了更改上述属性的行。我在
Update模型中没有任何before_saves。 -
不要使用
gsub!,interesting_attribute是一种方法。您只是在更改返回值。尝试分配:u.interesting_attribute = u.interesting_attribute.gsub 'old', 'new'。您在哪里进行此更改,before_save?
标签: ruby-on-rails ruby ruby-on-rails-4 gsub rake-task