我想创建一个哈希,它结合创建用户的user_id +记录的ID来制作MD5哈希,但仅限于创建记录。 (理由是啰嗦,但这就提取出来了。)
我在尝试:
class BlogPost < ActiveRecord::Base
after_create :hash_this
private
def hash_this
self.info_md5_hashed = (id.to_str + creator_user_id).my_MD5_hash_method
end
end
如何确保info_md5_hashed
字段实际保存到数据库?
如果我使用before_create
,我会认为该ID尚未提供? :(
如果我使用after_create
,我会认为该ID现已可用
- 但我是否需要以某种方式保存新计算的info_md5_hashed字段值?
答案 0 :(得分:2)
是的,您必须保存记录两次,因为ID生成发生在数据库中。唯一的方法是预先排序一个ID,但几乎肯定没有意义,你应该接受你必须保存两次记录;)
只需从after_create
挂钩内部调用第二次保存即可(即不会出现循环重复发生),因为第二次保存不会再次触发该挂钩;)
n.b。如果您想避免双重保存,您可以始终将哈希基于您知道唯一的哈希值,例如用户名或电子邮件。