Rails - 如何通过回调保存字段值(使用记录的ID)?

时间:2011-11-19 12:56:19

标签: ruby-on-rails ruby authentication hash md5

我想创建一个哈希,它结合创建用户的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字段值?

1 个答案:

答案 0 :(得分:2)

是的,您必须保存记录两次,因为ID生成发生在数据库中。唯一的方法是预先排序一个ID,但几乎肯定没有意义,你应该接受你必须保存两次记录;)

只需从after_create挂钩内部调用第二次保存即可(即不会出现循环重复发生),因为第二次保存不会再次触发该挂钩;)

n.b。如果您想避免双重保存,您可以始终将哈希基于您知道唯一的哈希值,例如用户名或电子邮件。