如何根据迁移制作rails 3模型类型

时间:2013-02-10 18:40:27

标签: ruby-on-rails-3 heroku migration

我遇到的问题是,当我运行迁移时,更新将应用于数据库,但rails不会执行相同的操作。

更准确。我有一个带门牌号码的地址模型。有人告诉我,门牌号应该能够包含字母,如(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):

我已经看到了forigen键的很多问题,但这不是那些问题之一。

1 个答案:

答案 0 :(得分:1)

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

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

尝试在您的应用程序上运行heroku restart - Rails应该接收更改。