无法从rails控制台更新数据库列值

时间:2014-12-15 07:09:09

标签: ruby-on-rails

我有一个名为Release的rails模式,我想从rails控制台更新特定行的单个列值,我的Release模式是:

class Release < ActiveRecord::Base
belongs_to :user
has_many :histories, dependent: :destroy
end

首先,我在生产环境中打开rails控制台:

RAILS_ENV=production rails c

比我找到使用行ID的特定行:

r=Release.find(92)

比我更新上面所选行的列的值:

x=r.reason
x.gsub!("abc","xyz")
r.reason=x
r.save!

以上所有查询都成功运行。但是,当我再次检查该值时,它仍然显示旧值:

Release.find(92).reason

2 个答案:

答案 0 :(得分:2)

好的我明白了,它与object_id

有关

你必须这样做

x=r.reason.dup

然后它工作正常。

来源: It's because the way ActiveRecord detects that attributes are changed is through the setter. Therefore, if you use gsub! on an attribute, ActiveRecord doesn't know it needs to update the database.

编辑:它与数据库类型无关。

答案 1 :(得分:0)

或者,我认为你也可以更明确地写出如下:

r.update_attributes reason: r.reason.gsub!('abc','xyz')