我不明白为什么会这样。我有以下迁移:
def self.up
create_table :leakages do |t|
t.integer :feature_id
t.integer :project_id
t.float :total
t.date :apt_date
end
add_index :leakages, [:feature_id, :apt_date]
end
Run Code Online (Sandbox Code Playgroud)
当我第一次运行它时它运行正常,但是当我再次运行迁移时会抛出一个错误,说leakages表已经存在。为什么会发生此错误?我正在使用 mysql2 gem。
您需要从 sql lite 控制台删除该表(您将丢失其中包含的所有数据)
1)访问sql lite控制台,输入终端
sqlite3 db/development.sqlite3
Run Code Online (Sandbox Code Playgroud)
2)删除表(不要忘记最后一个;)
drop table table_name;
Run Code Online (Sandbox Code Playgroud)
3) 退出 sql lite 控制台
.quit
Run Code Online (Sandbox Code Playgroud)
4) 再次运行 db:migrate
bin/rake db:migrate
Run Code Online (Sandbox Code Playgroud)
希望它有帮助,它对我有用
您的迁移self.down中有对应的吗?leakages如果没有,那么您可以将方法更改为def change,那么您应该能够运行上次迁移时运行rake db:migrate:redo的方法。db:migrate:downdb:migrate:up
您看到该消息的原因是该表已存在。 rake db:migrate不会掉落桌子。基本上它会运行当前环境中尚未运行的迁移。
您可能还有兴趣阅读:http://guides.rubyonrails.org/migrations.html#running-specific-migrations。
因此,要重新运行迁移(即 db:migrate:down 然后 db:migrate:up),您可以运行:
rake db:migrate:reset VERSION={your migration version}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11618 次 |
| 最近记录: |