我有一个名为'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
答案 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