Rails:如何将整数更改为字符串

时间:2017-05-26 14:07:25

标签: ruby-on-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 db:migrate RAILS_ENV = development

1 个答案:

答案 0 :(得分: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

再次rails db:migrate