2017-05-26 29 views
-3

我正在创建网站数据库。对于其中一列,我使用项目编号代码作为整数。无法处理数字大小,因此最好将其设置为字符串。但我已经将它设置为一个整数,我不能简单地在代码中进行更改。我该怎么做呢?Rails:如何将整数更改为字符串

这是我的迁移文件。

class CreateInventories < ActiveRecord::Migration[5.1] 
    def change 
    create_table :inventories do |t| 
     t.string :product_name 
     t.string :brand_name 
     t.integer :item_id 
     t.integer :upc_code 
     t.string :color 
     t.string :department 
     t.string :size 
     t.string :condition 
     t.string :fabric_type 
     t.string :shipping_weight 
     t.string :sku 
     t.string :asin 
     t.integer :quantity 
     t.string :cost_price 
     t.string :sell_price 
     t.string :key_product_features 
     t.text :product_description 
     t.string :search_terms 
     t.string :status 
     t.string :listing_in_usa 
     t.string :listing_in_canada 
     t.string :listing_in_mexico 

     t.timestamps 
    end 
    end 
end 

我想使upc_code和item_id都变成字符串。我如何开始?

好了,在新的文件我的代码是

class UpdateColumn < ActiveRecord::Migration[5.1] 
    def change 
    change_table :inventories do |t| 
     t.change :upc_code, :string 

    end 
    end 
end 

,但我得到一个错误

的ActiveRecord :: PendingMigrationError迁移仍在进行中。要解决 此问题,运行:BIN /导轨分贝:迁移RAILS_ENV =发展

+0

此表是正在进行的工作,还是已合并到主/部署在任何地方?除非只存在于本地计算机上,否则很少需要编辑现有的迁移。 –

+0

运行'rails db:migrate'。这就是为什么你得到ActiveRecord :: PendingMigrationError – UsamaMan

+0

这就是我所做的,但我仍然得到一个错误 – Davidson

回答

1

如果您还没有运行rails db:migraterake db:migrate,那么你可以简单地迁移中更改数据类型所需要的一个:

... 
t.string :upc_code 
... 

虽然如果item_id是外键,使InventoryItem之间的关系,那么你不能改变的类型,他们必须为这两个整数匹配。

但在另一方面,如果你已经运行db:migrate命令,那么你可以为了改变这些属性的类型,来创建一个新的迁移:

运行:

$ rails generate migration update_columns 

然后你编辑创建的文件:

class UpdateColumns < ActiveRecord::Migration 
    def change 
    change_table :inventories do |t| 
     t.change :upc_code, :string 
     ... 
    end 
    end 
end 

Then rails db:migrate again。

+0

我已经运行迁移 – Davidson

+0

我最近更新了答案。 –

+0

我是否包含t.timestamps? – Davidson

相关问题