2011-06-24 43 views
0

正在開發Ruby on Rails教程。我剛剛注意到,當我生成我的遷移時,我拼錯了一個列名。當我嘗試使用關聯時,出現此錯誤。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文件中更改了它。

回答

1

解決您最初的遷移有正確的拼寫,然後運行:

$ rake db:migrate:reset 

這將刪除你的開發數據庫,​​創建一個空的開發數據庫,​​所有重新運行(和任何數據!)定義的遷移對它。

+0

感謝RubySolo。 –

+0

我當然不會推薦它在你的生產服務器上,而是在你的開發工作站上(特別是在通過教程時),這很好。 – rubysolo

+0

沒有。它會刪除數據庫,然後重新運行所有遷移,因此根據定義,它使數據庫與所有遷移的結果相匹配。 – rubysolo

1

通常我回滾遷移(帶耙分貝:回滾),修復並重新運行;

1

切勿手動編輯架構。這不會對數據庫表進行任何更改。

只需運行一個新的遷移來重命名列:

rename_column :table, :old_column_name, :new_column_name 

要回答你的問題「我如何更新活動記錄」,你是一個有點不清楚你的條件。你的意思是「我如何更新數據庫表」?如果是這樣,答案是回滾你的遷移並修復它,或者運行一個新的遷移。要麼會工作,但回滾可能會導致生產模式下的數據丟失(我認爲這不是你的情況)。

要更改模型,只需在文本編輯器中打開ruby文件並對其進行更改。

1

如果你已經提交/把你的遷移,有可能比其他人都已經執行,所以你是更好地與新的遷移解決這個問題,從@Ed海伍德:

rename_column :table, :old_column_name, :new_column_name 

如果你這樣做沒有共享此遷移,則可以修復遷移而不是創建新遷移。要撤消上次遷移

rake db:rollback 

然後解決您的遷移和重新rake db:migrate

運行它,你應該永遠編輯schema.rb手動,則每次運行遷移時間更新。在沒有編輯它的情況下,在解決問題時應該是正確的。