1

問題は、日付型の列を持つテーブルがありますが、年だけを使用していることです。年だけを保持するために整数型に変更するにはどうすればよいですか? 3 ステップの移行が必要ですか? また、ロールバックを行うにはどうすればよいですか?

4

2 に答える 2

2

ここにある他のポスターのいくつかに同意します。おそらく、日付値として保持し、年のみを表示する方がよいでしょう。計算のために、その列のすべての日付値を 01-01-YYYY に設定できます。次に、その年をビューに表示したい場合は、次のようにします。

#- my_date_value=Wed, 18 Sep 2013 19:21:11 UTC +00:00
my_date_value.year
=> 2013

すなわち

<%= my_date_value.year %>

ただし、これを日付値にすることに決めた場合は、次のような移行を実行して、年のみの整数フィールドに変換できます。

class ChangeThingDateToYear < ActiveRecord::Migration
  def change
    add_column :things, :my_year_value, :integer

    # You need to tell ActiveRecord to refresh the object
    MyDatedThings.reset_column_information
    MyDatedThings.all.each do |r|
       r.my_year_value = r.my_date_value.year
       r.save!
    end

    remove_column :things, :my_date_value

    # If you want to keep the same column name
    rename_column :things, :my_year_value, :my_date_value
  end
end
于 2013-10-05T04:27:20.097 に答える
2

私は他のポスターに同意しません。それが本当に取得したい情報である場合は、年を整数として保存することをお勧めします。そうしないと、完全な日付を保存すると、実際には誤った情報を保存していることになります。つまり、日と月、および場合によってはカレンダーのメタデータも保存されます。これを使用するたびに、これを念頭に置いて、計算が本当にやりたいことであることを確認する必要があります。つまり、多くの Date and Time クラスとライブラリがあり、すべて Rails と Ruby 内で使用されています。

年だけが必要な場合は、年だけを保存します。これを実現するために、私は簡単で保守的な方法をとっています。単純な移行をいくつか行います。

  1. 新年の列を追加します。
  2. データを変換します。
  3. 古い年の列を削除します。
于 2013-10-05T04:36:53.977 に答える