hel*_*llo 19 ruby migration ruby-on-rails rails-migrations ruby-on-rails-3
我收到一个错误:
SQLite3::SQLException: no such column: ideas.list_id:
SELECT "ideas".* FROM "ideas"
WHERE "ideas"."list_id" = 2
Run Code Online (Sandbox Code Playgroud)
但我补充道
t.integer :list_id
到我的数据库迁移文件:
class CreateIdeas < ActiveRecord::Migration
def change
create_table :ideas do |t|
t.string :name
t.text :description
t.string :picture
t.timestamps
end
add_foreign_key :ideas, :lists
end
end
Run Code Online (Sandbox Code Playgroud)
这给了我这个:
class CreateIdeas < ActiveRecord::Migration
def change
create_table :ideas do |t|
t.string :name
t.text :description
t.string :picture
t.integer :list_id
t.timestamps
end
add_foreign_key :ideas, :lists
end
end
Run Code Online (Sandbox Code Playgroud)
然后我输入
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
知道为什么我会收到一个错误,说没有列?我还是RoR的新人.我是否必须以其他方式添加列?
谢谢
小智 53
正如Speransky建议的那样,你永远不应该修改旧的迁移文件.相反,您应该创建一个添加所需列的新迁移.例如,在这种情况下,您将在应用程序中运行以下命令来创建新的迁移:
rails generate migration AddListIdColumnToIdeas list_id:integer
Run Code Online (Sandbox Code Playgroud)
Rails会自动生成迁移文件,剩下要做的就是运行rake db:migrate.
如果您坚持修改旧的迁移文件,则可以像添加该列一样添加该列并运行以下命令:
rake db:drop
rake db:create
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
这将破坏您当前的数据库,创建一个新数据库并运行所有迁移(包括您的新列).
| 归档时间: |
|
| 查看次数: |
35289 次 |
| 最近记录: |