3

在找到 2 个与字符串与文本字段相关的 SO 问题后,我发现链接字段已经是文本:

create_table "answers", :force => true do |t|
  t.string   "text"
  t.text     "link"

为什么 Postgres 会抛出以下错误:

ActiveRecord::StatementInvalid: PG::Error: ERROR:  value too long for type character varying(255)

我尝试了迁移change_column :answers, :link, :text, :limit => nil,但我认为这没有任何作用。

编辑:所以,问题是架构说该字段是文本,但实际上它是字符串:

Answer.new.column_for_attribute('link').type
=> :string

修复它的最佳方法是什么?通过从模式重建数据库?通过将其更改为字符串然后返回文本?

Rails 3.2.2、Postgres 9、Heroku。

4

2 回答 2

1

不太确定它是如何发生的,但有以下情况之一:

  1. 我在运行迁移后检查了架构,所以实际上它是同步的。
  2. 我进行了迁移以将类型更改为字符串,从而使架构同步。
于 2012-09-05T15:32:49.830 回答
0

使用发送到 Postgres 的原始 SQL 语句编写迁移。只需调用execute您在 psql 控制台中直接运行的任何内容。这是准确了解您的数据库将处于何种状态的最佳方式。通常,这比让 Rails 为您定义架构更好。您真的应该定期查看您的架构,尤其是在运行迁移之后。

于 2012-09-05T15:14:24.190 回答