在字符串字段修改到位时,我可以强制ActiveRecord保存模型吗?

时间:2011-12-06 13:20:46

标签: ruby-on-rails activerecord

我有一个具有长字符串字段的ActiveRecord模型。实际上,这个字符串代表一个我想要就地修改而不是复制整个字符串的数组。

例如,假设Somemodel有一个字符串字段array。然后以下内容无法保存:

m = Somemodel.first
m.array[someindex] = somevalue
m.save

实际上,save返回true似乎检查array是否具有相同的object_id并确定模型未更改并跳过往返数据库。

我最终使用了以下解决方法:

m = Somemodel.first
a = String.new(m.array) # remember, the array is represented as a string
a[someindex] = somevalue
m.array = a
m.save

请注意,修改其值后必须设置m.array,因为save会查看值,而不仅仅是object_id

这感觉很麻烦,需要复制整个字符串。不适合大型阵列。 我是否可以告诉save在没有上述验证测试的情况下绕过这些is-model-modified检查?

2 个答案:

答案 0 :(得分:13)

也许这就是您所寻找的:http://api.rubyonrails.org/classes/ActiveModel/Dirty.html

  

如果就地修改了属性,那么请使用[attribute_name] _will_change!标记>属性正在改变。

答案 1 :(得分:0)

是的,在对象上实现哈希方法。

https://github.com/rails/rails/pull/15458