0

我遇到的问题是,当我运行迁移时,更新会应用于数据库,但 rails 不会这样做。

为了更准确。我有一个带有门牌号的地址模型。Recetly 我被告知门牌号码应该能够包含字母,如(35B)。因此,我想将整数列转换为字符串列。无论如何,这对我的数据没有问题,红色。只有整数。

我应用的迁移按预期工作。它更改 postgres 数据库中列的类型并保留数据内容。我正在使用此迁移。

class ConvertIntToStringOnNumber < ActiveRecord::Migration
  def change
    change_table :addresses do |t|
      t.change :number, :string
    end
  end
end

使用此 schema.rb 的迁移结果

create_table "addresses", :force => true do |t|
  t.string   "street"
  t.string   "number"
  t.integer  "zip"
  t.string   "floor"
  t.datetime "created_at", :null => false
  t.datetime "updated_at", :null => false
end

在我的 heroku 服务器上运行迁移后,我无法使用表单中的数据查询数据库,这在之前没问题。Rails 正在尝试查找整数,但数据库包含字符串。

Rails 正在尝试运行此查询,即使 schema.rb 说的有些不同。这是聚会停止的地方。

SELECT  "addresses".* FROM "addresses"  WHERE "addresses"."street" = 'xxxx' AND "addresses"."number" = 63 AND "addresses"."floor" = '' AND "addresses"."zip" = 9000 LIMIT 1):

我已经看到了很多与外来键有关的问题,但这不是这些问题之一。

4

1 回答 1

1

您是否在运行迁移后重新启动了应用程序?

ActiveRecord 在实例化表时将有关表的信息加载到每个类中。有关更多信息,请参阅#columns。由于 Heroku 在生产模式下运行您的应用程序,因此您的类不会在每次请求时自动重新加载。

尝试heroku restart在您的应用程序上运行——Rails 应该会接受这些更改。

于 2013-02-11T05:02:48.017 回答