1

标题真的说明了一切。我有一个带有多行表的 Rails 3.2 应用程序,这些行被添加但从未更改或删除。因此,尽管该列有用,但默认updated_at列没有用created_at。我可以安全地进行迁移以仅删除updated_at吗?

补充: 在一个好的指针之后,我仍在研究创建 SQL 更新语句的代码。created_at如果它不在模式中,则必须在此处省略该列。在这个应用程序中,我不能仅仅“尝试”并假设如果它在测试中有效,它就会一直有效。我需要绝对确定。我在网上能找到的Rails源码的搜索和交叉链接对下钻帮助不大。

4

1 回答 1

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它构建所有“时间戳列”的数组并循环它们的地方完成的。我想代码很清楚,如果respond_to?(column) && respond_to?("#{column}=") && self.send(column).nil? write_attribute(column.to_s, current_time)

于 2013-04-21T04:21:28.090 回答