Rake 由于迁移错误而中止
Rake aborted due to Migration error
我正在更改我以前的追随者模型的名称。我决定恢复原来的名称,但出现了错误。我决定使用 Drop_table 方法来解决这个问题,但进一步的问题追求者。我删除了所有与关注者相关的文件并进行了 rake db:schema:load 操作,结果没有出现任何错误。但每当我尝试做
rails g model Follower follower_id:integer followed_id:integer
并将其编辑为
def change
create_table :followers do |t|
t.integer :follower_id
t.integer :followed_id
t.timestamps
end
add_index :followers, :follower_id
add_index :followers, :leader_id
add_index :followers, [:follower_id, :leader_id], unique: true
end
然后我执行 rake db:migrate
并得到以下结果。任何人都知道我如何能够解决这个问题而不必从头开始?任何帮助表示赞赏。谢谢你。
== 20150910203914 CreateFollowers: migrating ==================================
-- create_table(:followers)
-> 0.0011s
-- add_index(:followers, :follower_id)
-> 0.0004s
-- add_index(:followers, :leader_id)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
SQLite3::SQLException: table followers has no column named leader_id: CREATE INDEX "index_followers_on_leader_id" ON "followers" ("leader_id")/Users/Steven/.rvm/gems/ruby-2.1.3/gems/sqlite3-1.3.10/lib/sqlite3/database.rb:91:in `initialize'
如错误所述,您没有名为 leader_id
的列。您应该将迁移更改为:
def change
create_table :followers do |t|
t.integer :follower_id
t.integer :leader_id
t.timestamps
end
add_index :followers, :follower_id
add_index :followers, :leader_id
add_index :followers, [:follower_id, :leader_id], unique: true
end
或者更确切地说,将 leader_id
更改为 followed_id
。
您还应该检查 activerecord 迁移 (source) 中的 references
修饰符。
您的 table 没有列 leader_id
。您可以看到,因为您在迁移中创建了 table,并且只指定了 3 列,其中没有 leader_id
。但是您正在尝试使用该列添加索引,这就是产生错误的原因。如果您不再需要该列,则需要更改索引。如果你确实想要它,那就按照jihonora的建议去做。
我正在更改我以前的追随者模型的名称。我决定恢复原来的名称,但出现了错误。我决定使用 Drop_table 方法来解决这个问题,但进一步的问题追求者。我删除了所有与关注者相关的文件并进行了 rake db:schema:load 操作,结果没有出现任何错误。但每当我尝试做
rails g model Follower follower_id:integer followed_id:integer
并将其编辑为
def change
create_table :followers do |t|
t.integer :follower_id
t.integer :followed_id
t.timestamps
end
add_index :followers, :follower_id
add_index :followers, :leader_id
add_index :followers, [:follower_id, :leader_id], unique: true
end
然后我执行 rake db:migrate
并得到以下结果。任何人都知道我如何能够解决这个问题而不必从头开始?任何帮助表示赞赏。谢谢你。
== 20150910203914 CreateFollowers: migrating ==================================
-- create_table(:followers)
-> 0.0011s
-- add_index(:followers, :follower_id)
-> 0.0004s
-- add_index(:followers, :leader_id)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
SQLite3::SQLException: table followers has no column named leader_id: CREATE INDEX "index_followers_on_leader_id" ON "followers" ("leader_id")/Users/Steven/.rvm/gems/ruby-2.1.3/gems/sqlite3-1.3.10/lib/sqlite3/database.rb:91:in `initialize'
如错误所述,您没有名为 leader_id
的列。您应该将迁移更改为:
def change
create_table :followers do |t|
t.integer :follower_id
t.integer :leader_id
t.timestamps
end
add_index :followers, :follower_id
add_index :followers, :leader_id
add_index :followers, [:follower_id, :leader_id], unique: true
end
或者更确切地说,将 leader_id
更改为 followed_id
。
您还应该检查 activerecord 迁移 (source) 中的 references
修饰符。
您的 table 没有列 leader_id
。您可以看到,因为您在迁移中创建了 table,并且只指定了 3 列,其中没有 leader_id
。但是您正在尝试使用该列添加索引,这就是产生错误的原因。如果您不再需要该列,则需要更改索引。如果你确实想要它,那就按照jihonora的建议去做。