修改 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(在创建自定义类型下)。
假设我有一些 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(在创建自定义类型下)。