修改ActiveRecord属性仅用于保存



让我们假设我有一些ActiveRecord实例。在将字段保存到数据库中之前,如何让rails映射字段,而不更改内存中记录的值
before_save回调似乎修改了值,而不仅仅是为了保存它。

此示例通过用n -> n*2(可逆映射器(映射字段n来显示所需行为

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)实际上会将记录保存到DB中。

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

最新更新