是否有活动记录回调可以让我在某些数据库字段检索到其值后立即设置非db字段?我需要在数据库检索后执行此操作,因为我需要为非db字段计算值。
我也欢迎其他方式来做到这一点。具体来说,我有一个非数据库的days_ago字段,然后我想在created_at可用之后创建它,我必须在模型类中执行此操作。
答案 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
变量中。第二次调用它时,它将返回缓存的值。