2

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

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

4

2 回答 2

5

You should use 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
于 2012-10-26T20:16:26.110 回答
2

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

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

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

于 2012-10-26T20:10:37.423 回答