【发布时间】:2016-01-23 11:39:16
【问题描述】:
我可以做些什么来解决这个错误?
我尝试用
添加列 rails generate migration AddCityIdToEvents city_id:integer
但运行后它仍然给我同样的错误 bundle exec rake db:迁移
== 20150925035910 ChangeIdTypes: migrating ====================================
-- change_column(:connections, :identity_id, "integer USING CAST(identity_id AS integer)")
-> 0.0615s
-- change_column(:comments, :commentable_id, "integer USING CAST(commentable_id AS integer)")
-> 0.0203s
-- change_column(:events, :city_id, "integer USING CAST(city_id AS integer)")
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
PG::UndefinedColumn: ERROR: column "city_id" of relation "events" does not exist
: ALTER TABLE "events" ALTER COLUMN "city_id" TYPE integer USING CAST(city_id AS integer)
这是我的模型:
class Event < ActiveRecord::Base
include PgSearch
multisearchable :against => [:name, :description]
nilify_blanks before: :validation
belongs_to :host, class_name: "User"
has_many :comments, as: :commentable
has_many :votes, as: :votable
validates :name, presence: true
validates :description, presence: true
validates :external_url, url: true, allow_blank: true
def user
host
end
end
和架构:
create_table "events", force: true do |t|
t.uuid "host_id"
t.string "name"
t.text "description"
t.integer "city_id"
t.string "country"
t.string "region"
t.boolean "unlocked"
t.datetime "scheduled_for"
t.string "venue"
t.boolean "external"
t.string "external_url"
t.integer "votes_count", default: 0
t.integer "comments_count", default: 0
t.integer "rsvps_count", default: 0
t.datetime "created_at"
t.datetime "updated_at"
end
在迁移文件 create_events.rb 中
class CreateEvents < ActiveRecord::Migration
def change
create_table :events do |t|
t.string "host_id"
t.string "title"
t.text "description"
t.string "city"
t.string "country"
t.string "continent"
t.boolean "unlocked"
t.datetime "scheduled_for"
t.string "venue"
t.boolean "external"
t.string "external_url"
t.integer "votes_count", default: 0
t.integer "comments_count", default: 0
t.integer "rsvps_count", default: 0
end
end
end
在迁移文件 20150925035910_change_id_types.rb 中
class ChangeIdTypes < ActiveRecord::Migration
def change
change_column :connections, :identity_id, 'integer USING CAST(identity_id AS integer)'
change_column :comments, :commentable_id, 'integer USING CAST(commentable_id AS integer)'
change_column :events, :city_id, 'integer USING CAST(city_id AS integer)'
change_column :users, :city_id, 'integer USING CAST(city_id AS integer)'
end
end
【问题讨论】:
-
Rails 认为您正在更改尚未创建的列。您能否展示模型的原始迁移和/或您将列添加到表中的迁移 (
AddCityIdToEvents)? -
创建事件的迁移文件:
class CreateEvents < ActiveRecord::Migration def change create_table :events do |t| t.string "host_id" t.string "title" t.text "description" t.string "city" t.string "country" t.string "continent" t.boolean "unlocked" t.datetime "scheduled_for" t.string "venue" t.boolean "external" t.string "external_url" t.integer "votes_count", default: 0 t.integer "comments_count", default: 0 t.integer "rsvps_count", default: 0 end end end -
谢谢...答案来了...
标签: ruby-on-rails postgresql ruby-on-rails-4