用于将字符串更改为整数的Rails迁移

时间:2014-03-17 00:27:34

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个名为'Lines'的嵌套模型。它是:

用户有很多制造商有很多行。

我在制造商中嵌套线。问题是,我是一个假人,并将Lines的db / schema中的manufacturer_id命名为STRING数据类型而不是INTEGER。我简直不敢相信。如何将其更改为整数?我不知道是否需要放桌子等?有人请帮忙...

# encoding: UTF-8
# This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
#
# Note that this schema.rb definition is the authoritative source for your
# database schema. If you need to create the application database on another
# system, you should be using db:schema:load, not running all the migrations
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
# you'll amass, the slower it'll run and the greater likelihood for issues).
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema.define(version: 20140316023038) do

  # These are extensions that must be enabled in order to support this database
  enable_extension "plpgsql"

  create_table "lines", force: true do |t|
    t.string   "name"
    t.string   "manufacturer_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "lines", ["manufacturer_id"], name: "index_lines_on_manufacturer_id", using: :btree

  create_table "manufacturers", force: true do |t|
    t.string   "name"
    t.integer  "user_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "manufacturers", ["user_id"], name: "index_manufacturers_on_user_id", using: :btree

  create_table "users", force: true do |t|
    t.string   "email",                  default: "", null: false
    t.string   "encrypted_password",     default: "", null: false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          default: 0,  null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "name"
    t.string   "address"
    t.string   "city"
    t.string   "zip"
    t.string   "state"
    t.string   "fax"
    t.string   "inside_sales_office"
    t.string   "inside_sales_cell"
    t.string   "inside_sales_email"
  end

  add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree
  add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree

end

2 个答案:

答案 0 :(得分:3)

老实说,如果您仍处于开发模式且未与团队共享架构,只需rake db:rollback直到它删除Lines表,请在迁移中编辑以下行:

   t.string   "manufacturer_id"

   t.integer   "manufacturer_id"

然后致电rake db:migrate。像Rails中的迁移工具一样优雅,没有任何东西阻止您回滚并以这种方式进行更改。

答案 1 :(得分:0)

在您的终端运行中:

rails g migration change_manufacturer_id_in_lines

然后在迁移文件中

class ChangeManufacturerIdInlines < ActiveRecord::Migration
  def up
   change_column :lines, :manufacturer_id, :integer
  end

  def down
   change_column :lines, :manufacturer_id, :string
  end
end

Documentation