我遇到的问题是,当我运行迁移时,更新将应用于数据库,但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键的很多问题,但这不是那些问题之一。
答案 0 :(得分:1)
您是否在运行迁移后重新启动了应用程序?
ActiveRecord在实例化时将有关表的信息加载到每个类中。有关详细信息,请参阅#columns。由于Heroku在生产模式下运行您的应用程序,因此不会在每个请求上自动重新加载您的类。
尝试在您的应用程序上运行heroku restart
- Rails应该接收更改。