Ruby on Rails,Active Record Updating

时间:2011-06-24 17:44:50

标签: ruby-on-rails ruby activerecord updating

开发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文件中更改了它。

5 个答案:

答案 0 :(得分:2)

您应该使用迁移功能来更新架构,而不是手动执行此操作。

在此处查找更多信息:http://guides.rubyonrails.org/migrations.html

答案 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

这将删除您的开发数据库(及其中的任何数据!),创建一个空的开发数据库,​​并针对它重新运行所有已定义的迁移。