问题是我有一个日期类型的列表,但我只使用年份。如何将其更改为整数类型以保持年份?我需要三步迁移吗?我该如何进行回滚?
答案 0 :(得分: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
答案 1 :(得分:2)
我不同意其他海报:如果真的是你要捕捉的信息,你最好将年份存储为整数。因为如果你没有,并存储一个完整的日期,那么你实际上存储的是一段虚假陈述的信息。即,它存储日期和月份以及可能的一些日历元数据。每次使用它时,您都需要记住这一点,并确保任何计算都是您真正想要做的。也就是说,有很多日期和时间类和库,都在使用中,都在Rails和Ruby中。
如果您只需要和想要年份,那么只存储一年。为实现这一目标,我将采用简单而保守的方式:进行几次简单的迁移。