Rails:将列默认设置为created_at时间戳

时间:2014-10-27 16:19:05

标签: ruby-on-rails postgresql timestamp default

我正在使用Postgres DB和Rails v4.1.6

我有一个包含start_time列的表格。

我希望start_time列为非null,并且具有时间戳的默认值,该值将是created_by中的值。

我的理解是created_by(和updated_at)的时间戳值是由Rails创建的,而不是由DB强制执行(如果这是错误的,请告诉我)。如果有办法匹配这两列?有没有办法让数据库执行它?

我现在唯一的解决方案是使用before_create过滤器(但我认为这两个值之间会存在不一致)。

1 个答案:

答案 0 :(得分:1)

我要感谢@Alireza和@ nikkon226对这个问题的看法。

我现在使用的解决方案是修改before_create过滤器中的start_time。在before_create中(至少在Rails v4.1.6中),时间戳已经设置好了。最好修改before_create中的记录而不是after_create,因为它为我们节省了至少1次保存调用。

当然,使用此解决方案,我无法再为start_time验证存在,因为验证在save / create之前发生。

如果有人有更好的解决方案,请分享。