修改 ActiveRecord 属性仅为保存

Modify ActiveRecord attribute only for saving

假设我有一些 ActiveRecord 实例。我怎样才能 rails 在它被保存到数据库之前映射它的一个字段,而不改变内存中记录的值?
before_save 回调似乎修改值不仅仅是为了保存它。

此示例通过将字段 n 映射到 n -> n*2(可逆映射器)

来显示所需的行为
x = MyRecord.create(n: 2)
x.n
=> 2
x.save()   # database should now contain value 4 in col n
x.n
=> 2       # value is still 2 (map only affects values in db)

更具体地说,我想使用 Marshal.dump & Marshal.load 来(反)序列化我的记录字段,以便数据库将它们包含为 blob。

在您的代码中,MyRecord.create(n: 2) 实际上会将记录保存到数据库中。

如果您想使用自定义序列化(例如,在字段的存储和内存格式之间编组)。然后您可以使用自定义值类型,请参阅:https://api.rubyonrails.org/classes/ActiveRecord/Attributes/ClassMethods.html(在创建自定义类型下)。