0

为 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
>> 

我的问题是如何使用职位的正确拼写来更新活动记录。我已经在我的架构文件中更改了它。

4

5 回答 5

2

如果您已经提交/推送您的迁移,则可能比其他人已经执行它,因此您最好通过@Ed Haywood 的新迁移来解决问题:

rename_column :table, :old_column_name, :new_column_name

如果您尚未共享此迁移,则可以修复迁移而不是创建新迁移。撤消上次迁移

rake db:rollback

然后修复您的迁移并再次运行它rake db:migrate

永远不应该手动编辑 schema.rb,每次运行迁移时都会更新它。在您没有编辑它的情况下,当您解决问题时它应该是正确的。

于 2011-06-24T18:18:10.007 回答
2

您应该使用迁移功能来更新您的架构,而不是手动进行。

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

于 2011-06-24T17:47:54.760 回答
2

切勿手动编辑架构。这不会对您的数据库表进行任何更改。

只需运行一个新的迁移来重命名该列:

rename_column :table, :old_column_name, :new_column_name

要回答您的问题“我如何更新 Active Record”,您的条款有点不清楚。您的意思是“如何更新数据库表”?如果是这样,答案是回滚您的迁移并修复它,或者运行新的迁移。两者都可以,但是回滚会导致生产模式下的数据丢失(我认为这不是你的情况)。

要更改模型,您只需在文本编辑器中打开 ruby​​ 文件并进行更改。

于 2011-06-24T17:56:45.530 回答
1

通常我回滚迁移(使用 rake db:rollback),修复它并再次运行它;

于 2011-06-24T17:48:24.187 回答
1

修复您的初始迁移以具有正确的拼写,然后运行:

$ rake db:migrate:reset

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

于 2011-06-24T17:49:26.060 回答