在rails ActiveRecord中删除updated_at字段是否安全?

时间:2013-04-21 02:50:00

标签: ruby-on-rails activerecord

标题真的说明了一切。我有一个Rails 3.2应用程序,其中包含许多行的表,这些行已添加但从未更改或删除。因此,默认updated_at列无效,但created_at列是。我可以安全地进行迁移以仅删除updated_at吗?

添加:在一个好的指针之后,我仍然在为创建SQL更新语句的代码进行管道处理。如果它不在模式中,则必须省略created_at列。在这个应用程序中,我不能仅仅“尝试它”并假设如果它在测试中工作它将始终有效。我需要绝对肯定。我可以找到的Rails源代码的搜索和交叉链接对于向下钻取并不是很有帮助。

1 个答案:

答案 0 :(得分:4)

这样做实际上是安全的;

来自ActiveRecord的Persitence图层的结帐行#204:https://github.com/rails/rails/blob/master/activerecord/lib/active_record/persistence.rb

它说:

  如果该列可用,则更新

updated_at / updated_on列。

此外,如果你深入挖掘,你会发现touch方法是执行updated_at / on属性更新的方法,只有当该列存在时才会调用它。

修改

进一步挖掘:如果存在created_at / updated_at列,则类/lib/active_record/timestamp.rb负责为创建/更新的记录加时间戳。检查在Timestamp::create_record中完成,它在其中构建一个包含所有“to timestamp列”的数组并循环遍历它们。我想如果respond_to?(column) && respond_to?("#{column}=") && self.send(column).nil? write_attribute(column.to_s, current_time)

,代码就很清楚了