created_at字段有时会变为零
我认为created_at
总是设置为ActiveRecord创建的记录的时间,但我发现一些记录是使用null created_at
创建的。 有没有条件导致这个?
这些列created_at,updated_at,created_on,updated_on由rails自动处理。
但是,有一些注意事项:
- 不要更改attr的值(即
created_at
在创建之前应为nil, 在更新之前不应更改 )。 否则,ActiveRecord将不会使用当前时间更新attr的值。 - 检查
是否设置为true。.record_timestamps
另外,我建议你为这些列添加非空约束:
change_column :, :created_at, :datetime, :null => false
这样,您将确保此列始终具有非null值。
您是否在模型上使用attr_accessible
或attr_protected
?
因为没有这些基本保护,任何更新请求都可以设置这些未经validation和未受保护的属性。
质量分配安全性
我现在唯一能想到的就是你可能会覆盖视图中的created_at
属性。
<%= t.text_field :created_at %>
并且在提交表单时传递的值未被ActiveRecord正确转换,变为nil
。
created_at
并不意味着被操作,最好创建另一个字段,如creation_date
并保留默认情况下填充它。 但这只是猜测。