我有一个具有长字符串字段的 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
看值(value)而不仅仅是 object_id
.这感觉很麻烦,并且需要复制整个字符串。不适合大型阵列。 我可以告诉
save
在不进行验证测试的情况下绕过这些 is-model-modified 检查?
最佳答案
也许这就是您要找的:http://api.rubyonrails.org/classes/ActiveModel/Dirty.html :
If an attribute is modified in-place then make use of [attribute_name]_will_change! to mark > that the attribute is changing.
关于ruby-on-rails - 当字符串字段被修改时,我可以强制 ActiveRecord 保存模型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8400572/