我正在创建一个网站数据库。对于其中一列,我使用项目编号代码作为整数。无法处理数字大小,因此最好将其作为字符串。但我已经将它设置为整数,我不能简单地在代码中更改它。我该怎么做?
这是我的迁移文件。
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
答案 0 :(得分:1)
如果您还没有运行rails db:migrate
或rake db:migrate
,那么您只需将迁移中的数据类型更改为所需的数据类型:
...
t.string :upc_code
...
虽然如果item_id
是在Inventory
和Item
之间建立关系的外键,那么您无法更改类型,但它们必须匹配为两个整数。
但另一方面,如果您已经运行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
。