我发现了一个错误:
SQLite3::SQLException: no such column: ideas.list_id:
SELECT "ideas".* FROM "ideas"
WHERE "ideas"."list_id" = 2
但是我加
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
这给了我这样的:
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
然后我输入
rake db:migrate
任何想法,为什么我会得到一个错误说没有列? 我还是新来RORS。 我一定要添加一列一些其他的方式?
谢谢
作为斯佩兰斯基建议,你永远不应该修改旧迁移文件。 相反,你应该创建一个新的迁移,增加了所需的列。 举例来说,在这种情况下,你会在你的应用程序来创建新的迁移运行以下命令:
rails generate migration AddListIdColumnToIdeas list_id:integer
和Rails会自动生成迁移文件,唯一剩下要做的就是运行rake db:migrate
。
如果你坚持要修改旧的移民文件,你可以像你一样添加列,并运行以下命令:
rake db:drop
rake db:create
rake db:migrate
这将破坏当前的数据库,创建一个新的和运行所有的迁移(其中将包括新列)。
如果你想一个新的列添加到数据库的存在,你应该使用rails generate migration
。 所以,你可以尝试rails generate migration add_list_id_to_ideas list_id:integer
,然后用rake db:migrate
到提交此变更。
你不应该新行老migration增加。 迁移是构建数据库的步骤。 而在去年执行的移民数目存储在schema
,如果你使用会用它不会被运行或重做rake db:migrate
。 如果您用之前创建表的迁移,那么您应该创建新的迁移,你可以使用add_column
方法。
迁移文件名的名称中编码的日期时间使轨运行这个迁移一而再,除非你做一个回滚不要运行它
而来到这里迁移的魔力打造你的小步骤分贝所以不需要更新运行耙分贝后迁移:迁移,你应该做一个新的迁移做你的数据库架构需要的变化
并记住
删除已添加的行形成老迁移文件,因为它可能会产生错误,如果你决定回滚此迁移
Rails的4.0简单的方法来添加单个或多个列 https://gist.github.com/pyk/8569812
你也可以做到这一点..
rails g migration add_column_to_users list_id:string
然后rake db:migrate
还add :list_id
属性,为用户控制器;
更多细节请查看http://guides.rubyonrails.org/active_record_migrations.html
如果你已经在你的迁移夹中的文件,你可以只添加你想要有柱(只需输入代码),删除development.sqlite或任何代表你的数据库文件,并运行耙分贝:迁移。 然后,它会创建表新列一个新的sqlite的文件,并且可以在schema.rb检查
所以,基本上,你做的一切似乎不错,除了你没有删除数据库文件。 这样做似乎是最简单的对我来说,所有的虽然你将失去你的数据库中的所有文件。 如果你只是在测试和开发Rails应用程序,这个工程。 任何人都可以评论,如果有什么不对这种方法,除了我写的?
编辑:其实,我发现有关此答案编辑现有的Rails移植是一个好主意?