created_at字段有时会变为零

我认为created_at总是设置为ActiveRecord创建的记录的时间,但我发现一些记录是使用null created_at创建的。 有没有条件导致这个?

这些列created_at,updated_at,created_on,updated_on由rails自动处理。

但是,有一些注意事项:

  1. 不要更改attr的值(即created_at 在创建之前应为nil, 在更新之前不应更改 )。 否则,ActiveRecord将不会使用当前时间更新attr的值。
  2. 检查.record_timestamps是否设置为true。

另外,我建议你为这些列添加非空约束:

 change_column :, :created_at, :datetime, :null => false 

这样,您将确保此列始终具有非null值。

您是否在模型上使用attr_accessibleattr_protected

因为没有这些基本保护,任何更新请求都可以设置这些未经validation和未受保护的属性。

质量分配安全性

我现在唯一能想到的就是你可能会覆盖视图中的created_at属性。

 <%= t.text_field :created_at %> 

并且在提交表单时传递的值未被ActiveRecord正确转换,变为nil
created_at并不意味着被操作,最好创建另一个字段,如creation_date并保留默认情况下填充它。 但这只是猜测。