web-dev-qa-db-ja.com

ROR移行中に列タイプをDateからDateTimeに変更します。

作成しているアプリの列の種類を日付から時刻に変更する必要があります。データはまだ開発中なので、気にしません。

これどうやってするの?

221
jdog

まずあなたの端末で:

Rails g migration change_date_format_in_my_table

それからあなたの移行ファイルで:

Railsが3.2以上の場合

class ChangeDateFormatInMyTable < ActiveRecord::Migration
  def up
    change_column :my_table, :my_column, :datetime
  end

  def down
    change_column :my_table, :my_column, :date
  end
end
498
apneadiving

また、Rails 3以降を使用している場合は、upおよびdownメソッドを使用する必要はありません。 changeを使うことができます。

class ChangeFormatInMyTable < ActiveRecord::Migration
  def change
    change_column :my_table, :my_column, :my_new_type
  end
end
77
Lee McAlilly

Rails 3.2とRails 4では、Benjaminの よくある回答 の構文が少し異なります。

まずあなたの端末で:

$ Rails g migration change_date_format_in_my_table

それからあなたの移行ファイルで:

class ChangeDateFormatInMyTable < ActiveRecord::Migration
  def up
   change_column :my_table, :my_column, :datetime
  end

  def down
   change_column :my_table, :my_column, :date
  end
end
40
Thomas Klemm

change_column メソッドがあります。新しいタイプとしてdatetimeを使ってマイグレーションの中でそれを実行してください。

change_column(:my_table, :my_column, :my_new_type)
23
Nikita Rybak

私の知る限り、移行はスキーマを変更するときに気になるデータ(つまり本番)を作り直すことです。それが間違っていない限り、そして彼がデータを気にしないと言っていたので、元のマイグレーションのカラムタイプを日付から日付/時刻に変更してマイグレーションを再実行しないのはなぜでしょうか。 (あなたがテストを持っていることを願っています:))。

1
fakeleft