【发布时间】:2014-10-27 16:19:05
【问题描述】:
我正在使用带有 Rails v4.1.6 的 Postgres DB
我有一张带有start_time 列的表格。
我希望start_time 列不为空,并且时间戳的默认值将是created_by 中的值。
我的理解是created_by(和updated_at)的时间戳值是由Rails 创建的,而不是由数据库强制执行的(如果这是错误的,请告诉我)。如果有办法匹配这两列?有没有办法让数据库强制执行它?
我现在唯一的解决方案是使用 before_create 过滤器(但我认为这两个值之间会存在不一致)。
【问题讨论】:
-
您是否考虑过使用
after_create回调来更新start_time属性,将其设置为等于created_at值? -
我必须同意@Alireza 如何处理这种情况。强制执行数据库的方法是在模型中创建自定义创建方法,并在每次创建时调用该方法(这将更加困难),这将满足架构中的非空要求。
-
您是否需要两列完全在同一时刻?
start_time以后会改变吗? -
@Alireza 和 nikkon226 感谢您的回复。 after_create 可能是我最好的选择。因为保存流程中的操作顺序在保存之前进行了验证,有没有办法在 start_time 上进行验证?我的猜测不是。
-
@Substantial 我的目标是让它们完全相同
标签: ruby-on-rails postgresql timestamp default