1. ホーム
  2. ruby-on-rails

[解決済み] マイグレーションで作成時間を記録するためにdatetimeカラムにデフォルト値を設定するには?

2022-05-13 20:40:02

質問

以下のテーブル作成スクリプトを考えてみましょう。

create_table :foo do |t|
  t.datetime :starts_at, :null => false
end

デフォルト値を現在時刻にすることは可能でしょうか?

私は、以下に示すSQLの列定義について、railsでDBに依存しない同等のものを見つけようとしています。

Oracleの構文

start_at DATE DEFAULT SYSDATE() 

MySQLの構文

start_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

または

start_at DATETIME DEFAULT NOW()

どのように解決するのですか?

Rails 5でサポートされるようになりました。

以下はマイグレーションのサンプルです。

class CreatePosts < ActiveRecord::Migration[5.0]
  def change
    create_table :posts do |t|
      t.datetime :modified_at, default: -> { 'CURRENT_TIMESTAMP' }
      t.timestamps
    end
  end 
end

の議論を参照してください。 https://github.com/rails/rails/issues/27077 と、そこでの prathamesh-sonpatki さんの回答を参照してください。