移行時に作成時刻を記録するために日付時刻列のデフォルト値を設定するにはどうすればよいでしょうか? 質問する

移行時に作成時刻を記録するために日付時刻列のデフォルト値を設定するにはどうすればよいでしょうか? 質問する

以下のテーブル作成スクリプトを検討してください。

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

デフォルト値を現在の時刻に設定することは可能ですか?

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

Oracle 構文

start_at DATE DEFAULT SYSDATE() 

MySQL 構文

start_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

または

start_at DATETIME DEFAULT NOW()

ベストアンサー1

これは現在 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

議論を参照参考:prathamesh-sonpatkiによる回答

おすすめ記事