Rails で created_at や updated_at に現在日時を DEFAULT で入れたい場合(= created_at や updated_at カラムを任意の形式で作る場合)

結論

こんな具合に書きます。

class CreateUsers < ActiveRecord::Migration[5.1]
  def change
    create_table :users do |t|
      # 省略

      t.datetime :created_at, default: -> { 'CURRENT_TIMESTAMP' }
      t.datetime :updated_at, default: -> { 'CURRENT_TIMESTAMP' }
    end
  end 
end

備考

  • Rails というより Active Record の機能のような気もしますが、参考にしたページでは Rails 5 からサポートされたと書いてあるのでこのような標題にしました
  • 当然ながら created_atupdated_at だけでなく、datetimeであるあらゆるカラムで使えます
  • これまた当然ながら、上記のように指定した場合は t.timestamps は必要ありません*1
  • そしてまた当然ながら、「現在日時」である必要はありません
  • なんでこんな変な運用をと、思うかもしれませんが、こうしなきゃいけないときも(きっと)あります

参考ページ

*1:というか含んだらエラーになります

Powered by はてなブログ