rails从数据库中检索值后触发的活动记录回调

时间:2012-10-26 19:37:40

标签: ruby-on-rails

是否有活动记录回调可以让我在某些数据库字段检索到其值后立即设置非db字段?我需要在数据库检索后执行此操作,因为我需要为非db字段计算值。

我也欢迎其他方式来做到这一点。具体来说,我有一个非数据库的days_ago字段,然后我想在created_at可用之后创建它,我必须在模型类中执行此操作。

2 个答案:

答案 0 :(得分:5)

您应该使用after_find

after_find :set_days_ago

def set_days_ago
  self.days_ago = DateTime.now - self.created_at.to_datetime if self.created_at
end

答案 1 :(得分:2)

听起来你可能想要一个'懒惰'days_ago字段。您应该只在实际需要时计算days_ago值,方法是在模型中添加这样的方法:

def days_ago
  return nil unless created_at?
  @days_ago ||= ... # (calculation involving created_at)
end

第一次调用days_ago时,它会计算值,并将值缓存在@days_ago变量中。第二次调用它时,它将返回缓存的值。