ruby-on-rails – 如何更改Heroku中的列类型?

我试图把db:迁移到我的heorku实例,我收到一个错误。常见问题描述了我的错误如下:

Cannot change column type

Example: PGError: ERROR: column
“verified_at” cannot be cast to type
“date”

Cause: PostgreSQL doesn’t know how to
cast all the rows in that table to the
specified type. Most likely it means
you have an integer or a string in
that column.

Solution: Inspect your records and
make sure they can be converted to the
new type. Sometimes it’s easier to
just avoid using change_column,
renaming/creating a new column
instead.

现在如何更改此迁移。这是我有的问题。对于我的联系人表,我创建了以下内容:

  t.string :date_entered

在稍后的迁移中,我执行以下操作:

 change_column :contacts, :date_entered, :date

这个change_column似乎是问题。

我应该用手转换吗?有没有办法清理我的表中的数据(我不知道Heroku会识别表中的数据,因为我正在做一个耙子)。

我显然需要改变这个值,它在我的应用程序中被使用。谢谢。

这是我正在想的…想法?

def self.up
  #change_column :contacts, :date_entered, :date
  #this fails in postgres, so trying the same outcome 

  rename_column :contacts, :date_entered, :date_entered_old
  add_column :contacts, :date_entered, :date
  remove_column :contacts, :date_entered_old
end

def self.down
  add_column :contacts, :date_entered_old
  remove_column :contacts, :date_entered
  rename_column :contacts, :date_entered_old, :date_entered
end
执行以下操作:

>重命名列A
>创建新列B作为日期
>将数据从A移动到B
>删除A

换一种说法

def self.up
  rename_column :contacts, :date_entered, :date_entered_string
  add_column :contacts, :date_entered, :date

  Contact.reset_column_information
  Contact.find_each { |c| c.update_attribute(:date_entered, c.date_entered_string) } 
  remove_column :contacts, :date_entered_string
end
http://stackoverflow.com/questions/3075920/how-do-i-change-column-type-in-heroku

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:ruby-on-rails – 如何更改Heroku中的列类型?