2011-12-13 9 views
2

Railsで奇妙な移行の問題が発生しました。奇妙な移行エラー

私は

    ようないくつかの新しい列で、このユーザテーブルを拡張したい、このユーザテーブル

    • パスワード
    • メール
    • ...

    を持っている

  • 名前
  • DOB
  • ..

は、その後、私は私の最初の2人のユーザーのために新しい列を埋めるために、このような移行を実行したい:

class UpdateUser < ActiveRecord::Migration 
    def up 
    User.find(1).update_attributes!(:name => 'Alexander', :dob => '1984-08-20') 

    User.find(2).update_attributes!(:name => 'Ben', :dob => '1929-04-04') 
    end 

    def down 
    end 
end 

は、ここで問題です:私はすべての移行を実行すると、最後のもの(UpdateUser)なしでファイル(rake db:migrate)を実行し、最後に新しいマイグレーション(rake db:migrate)を実行します。しかし、1つのステップ(ドロップ、作成、移行)ですべての移行を行っているときは機能しません。

最後のマイグレーションファイルを除外して、最初の「マイグレーションラウンド」の後に組み込む必要があります...なぜですか?

+0

でActiveRecordの移行についての詳細情報を見つけることができますか? – buruzaemon

+0

rake db:migrate --traceを実行するとエラーは発生しません。 –

+0

以前の移行で実際に 'user' id 1と2を作成していますか? – buruzaemon

答えて

3

なぜ列を追加するときにテーブルを更新するだけではありません。したがって、モデルに現在の列情報があることを確認するために、列を追加した後にUser.reset_column_informationメソッドを実行する必要があります。

add_column ... 

User.reset_column_information 

User.find(1).update_attributes!(:name => 'Alexander', :dob => '1984-08-20') 
User.find(2).update_attributes!(:name => 'Ben', :dob => '1929-04-04') 

あなたは、私たちはより良いあなたの問題を理解できるように、おそらくあなたは、エラー・スタックトレースを含めることができhttp://api.rubyonrails.org/classes/ActiveRecord/Migration.html