Ruby on rails 将迁移类型从日期更改为整数

Ruby on rails 将迁移类型从日期更改为整数,ruby-on-rails,Ruby On Rails,如何将迁移从日期类型更改为整数? 我在Rails官方网站上查了一下,他们说我应该写“改变”专栏 我试过这个: def change change_column :books, :publish_year, :integer end 但这给了我一个错误: PG::DatatypeMismatch:错误:“发布年份”列无法自动转换为整型 提示:您可能需要指定“使用发布年份::整数”。 :ALTER TABLE“books”ALTER COLUMN“publish\u year”类型整数 我希望

如何将迁移从日期类型更改为整数? 我在Rails官方网站上查了一下,他们说我应该写“改变”专栏

我试过这个:

def change
  change_column :books, :publish_year, :integer
end
但这给了我一个错误:

PG::DatatypeMismatch:错误:“发布年份”列无法自动转换为整型 提示:您可能需要指定“使用发布年份::整数”。 :ALTER TABLE“books”ALTER COLUMN“publish\u year”类型整数

我希望我的“图书出版年份”列的类型为整数,而不是日期。

试试这个兄弟

change_column :table_name, :column_name, 'integer USING CAST(column_name AS integer)'
希望这有帮助。:)

试试这个兄弟

change_column :table_name, :column_name, 'integer USING CAST(column_name AS integer)'

希望这有帮助。:)

Do
remove\u列:books,:publish\u year
然后做
添加列:books,:publish\u year,:integer


您可以在一次迁移中同时使用这两种方法,但我通常会在不同的迁移中使用每种方法,这使得回滚对我来说更容易

Do
remove\u列:books,:publish\u year
然后做
添加列:books,:publish\u year,:integer


您可以在一次迁移中同时使用这两种方法,但我通常会在不同的迁移中使用每种方法,这使得回滚对我来说更容易

主要原因是PgSQL公共API及其允许的方法取决于版本

PostgreSQL中没有更新列数据类型的操作。如果阅读操作列表,可以在链接中看到允许的操作

现在,在后来的PgSQL中,例如,他们添加了该操作

他们在8.0版中添加了它

因此,根据PgSQL的版本,可能会出现错误,也可能会正常工作。我建议您更新PgSQL,如果您使用的是第三方数据库,请他们更新

但是对于早期的情况,您可以通过迁移使用删除和创建表或列的方法来实现结果


希望这能解释

主要原因是PgSQL公共API及其允许的方法取决于版本

PostgreSQL中没有更新列数据类型的操作。如果阅读操作列表,可以在链接中看到允许的操作

现在,在后来的PgSQL中,例如,他们添加了该操作

他们在8.0版中添加了它

因此,根据PgSQL的版本,可能会出现错误,也可能会正常工作。我建议您更新PgSQL,如果您使用的是第三方数据库,请他们更新

但是对于早期的情况,您可以通过迁移使用删除和创建表或列的方法来实现结果


希望这能解释

它给出了以下错误:PG::cannot强制:错误:无法将类型日期强制转换为整数行1:…s“ALTER COLUMN”publish_year“type integer USING cast(publish…^:ALTER TABLE”books“ALTER COLUMN”publish_year”type integer USING cast(publish_year AS integer)你在表格的那一列中有重要数据吗?不,我还在开发模式中,所以现在我的种子都是我自己做的。谢谢!但是你知道为什么它不能与change_列一起工作吗?所以PG发现很难将一些日期解析为整数。另一种方法是编写一个“IF-THEN-ELSE”条件来处理这些数据ose类型的日期,这意味着您必须编写原始SQL,我猜您不是期望中的。它给了我以下错误:PG::cannot强制:错误:无法将类型日期强制转换为整数行1:…s“ALTER COLUMN”publish_year“type integer”USING cast(publi…^:ALTER TABLE“books”使用CAST更改列“发布年份”类型整数(发布年份为整数)你在表格的那一列中有重要数据吗?不,我还在开发模式中,所以现在我的种子都是我自己做的。谢谢!但是你知道为什么它不能与change_列一起工作吗?所以PG发现很难将一些日期解析为整数。另一种方法是编写一个“IF-THEN-ELSE”条件来处理这些数据ose类型的日期,这意味着您必须编写原始SQL,我猜您不是期望中的。它给了我以下错误:PG::CannotImprove:错误:无法将类型日期强制转换为整数行1:…s“ALTER COLUMN”publish_year“type integer USING cast(publi…^:ALTER TABLE)”books“ALTER COLUMN”publish_year“TYPE integer USING CAST(publish_year AS integer)它给我以下错误:PG::cannot强制:错误:无法将类型日期强制转换为整数行1:…s“ALTER COLUMN”publish_year”TYPE integer USING(publi…^:ALTER TABLE“books”ALTER COLUMN“publish_YEA“使用CAST(publish_year AS integer)键入integer我明白了,我有一次说我应该更新我的PgSQL。然后我会这样做!我明白了,我有一次说我应该更新我的PgSQL。然后我会这样做!