1

The title really says it all. I have a Rails 3.2 app with a table of many rows, which are added but never changed or deleted. So the default updated_at column isn't useful, though the created_at column is. Can I safely do a migration to delete only updated_at?

Addition: After a good pointer, I'm still plumbing for the code that creates the SQL update statements. It's here the created_at column would have to be omitted if it weren't in the schema. In this app I can't afford to merely "try it" and assume that if it works in testing it will always work. I need to be absolutely sure. The search and cross-links of the Rails source on line that I can find are not very helpful for drilling down.

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 属性の更新を実行するものであり、その列が存在する場合にのみ呼び出されることがわかります。

編集

さらに掘り下げます: クラス/lib/active_record/timestamp.rbは、created_at/updated_at 列が存在する場合、作成/更新されたレコードにタイムスタンプを付ける責任があります。チェックは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 に答える