开发Ruby on Rails教程。我刚刚注意到,当我生成迁移时,我拼错了一个列名。当我尝试使用关联时,我得到了这个错误。
first_page = Page.new(:name => "first page", :permalink => 'first', :position => 1)
ActiveRecord::UnknownAttributeError: unknown attribute: position
from /Library/Ruby/Gems/1.8/gems/activerecord-3.0.8/lib/active_record/base.rb:1564:in `attributes='
from /Library/Ruby/Gems/1.8/gems/activerecord-3.0.8/lib/active_record/base.rb:1560:in `each'
from /Library/Ruby/Gems/1.8/gems/activerecord-3.0.8/lib/active_record/base.rb:1560:in `attributes='
from /Library/Ruby/Gems/1.8/gems/activerecord-3.0.8/lib/active_record/base.rb:1412:in `initialize'
from (irb):5:in `new'
from (irb):5
>>
我的问题是如何使用正确的位置拼写更新活动记录。我在我的Schema文件中更改了它。
答案 0 :(得分:2)
您应该使用迁移功能来更新架构,而不是手动执行此操作。
答案 1 :(得分:2)
永远不要手动编辑架构。这不会对数据库表进行任何更改。
只需运行新迁移即可重命名该列:
rename_column :table, :old_column_name, :new_column_name
要回答您的问题“我如何更新Active Record”,您对自己的条款有点不清楚。你的意思是“我如何更新数据库表”?如果是这样,答案是回滚迁移并修复它,或者运行新的迁移。两者都可以工作,但回滚可能会导致生产模式中的数据丢失(我认为这不是你的情况)。
要更改模型,只需在文本编辑器中打开ruby文件并进行更改即可。
答案 2 :(得分:2)
如果您已经提交/推送迁移,则可能比其他人已经执行了迁移,因此您最好通过@Ed Haywood解决新迁移问题:
rename_column :table, :old_column_name, :new_column_name
如果您没有共享此迁移,则可以修复迁移而不是创建新迁移。撤消上次迁移
rake db:rollback
然后修复您的迁移并再次运行rake db:migrate
您应该永远不会手动编辑schema.rb ,每次运行迁移时都会更新它。在没有编辑的情况下,解决问题后它应该是正确的。
答案 3 :(得分:1)
通常我会回滚迁移(使用rake db:rollback),修复它并再次运行它;
答案 4 :(得分:1)
修复初始迁移以获得正确的拼写,然后运行:
$ rake db:migrate:reset
这将删除您的开发数据库(及其中的任何数据!),创建一个空的开发数据库,并针对它重新运行所有已定义的迁移。