我正在使用delayed job 3.0.2与ActiveRecord和Rails 3.2.3。我有一个用户模型,使用了has_secure_password mixin,因此密码仅以加密形式存储。现在我想使用delayed job发送欢迎电子邮件,其中应包含未加密的密码副本。
当创建记录时,明文密码位于User#password中。但是,延迟作业似乎仅序列化/反序列化记录的ID,并通过执行User.find(X)来创建模型的新实例。这样,我的明文密码就丢失了,并且用户在电子邮件中得到了空密码。
如何告诉delayed-job也对自定义“虚拟”属性进行序列化/反序列化,这些属性否则不会存储在数据库中?
这是我的delayed job 2.x的monkey patch,可以正常工作。
当创建记录时,明文密码位于User#password中。但是,延迟作业似乎仅序列化/反序列化记录的ID,并通过执行User.find(X)来创建模型的新实例。这样,我的明文密码就丢失了,并且用户在电子邮件中得到了空密码。
如何告诉delayed-job也对自定义“虚拟”属性进行序列化/反序列化,这些属性否则不会存储在数据库中?
这是我的delayed job 2.x的monkey patch,可以正常工作。
class ActiveRecord::Base
def self.yaml_new(klass, tag, val)
klass.find(val['attributes']['id']).tap do |m|
val.except("attributes").each_pair{ |k, v| m.send("#{k}=", v) }
end
rescue ActiveRecord::RecordNotFound
raise Delayed::DeserializationError
end
end
它不能与delayed job 3.x一起使用。我也不是很想修复我的猴子补丁,因为我希望有一个正确的解决方案。