ruby-on-rails - 当字符串字段被修改时,我可以强制 ActiveRecord 保存模型吗?

标签 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看值(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/

相关文章:

ruby-on-rails - 使用 ActiveRecord 和 Postgres 分组

ruby-on-rails - 如何禁用 Mongodb 继承? (忽略类型字段)

ruby-on-rails - Elasticsearch + Tire不能忽略口音

ruby-on-rails - 使用 `rails server` 和 `rackup` 有什么区别?

ruby-on-rails - 跟踪 "last active"时间的最优雅方式

ruby-on-rails - 表轨中 ActiveRecord::Associations::CollectionProxy 的排序顺序

ruby-on-rails - 比较 2 个大型 ActiveRecord 关系进行排序

ruby-on-rails - 使用 Rails 创建 RSS 提要

ruby-on-rails-3 - 如何向 ActiveRecord::Base 添加方法?

ruby-on-rails - Rails ActiveRecord session 存储在 HTML5 SessionStorage 而不是 Cookie 中