2012-05-08 13 views
0
== AddAncestryToMessages: migrating ========================================== 
-- add_column(:messages, :ancestry, :string) 
rake aborted! 
An error has occurred, this and all later migrations canceled: 

SQLite3::SQLException: no such table: messages: ALTER TABLE "messages" ADD "ancestry" varchar(255) 

私のアプリケーションには、あなたが投稿できるメッセージ(Twitterのようなもの)と私の返信を追加するメッセージがあり、そうするためにancestry gemを使用しています。rake db:migrateを実行しようとすると、このエラーが発生するのはなぜですか?

schema.rbファイル(私はこれはそれがテーブルにあなたがすくいデシベルを実行するたびに作成するために使用するファイルだと思うの私のコード:。!(これが問題になる可能性があるの移行が、私は間違っている可能性)

create_table "messages", :force => true do |t| 
    t.string "content" 
    t.integer "user_id" 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
    t.string "ancestry" 
    end 

    add_index "messages", ["user_id", "created_at", "ancestry"], :name => "index_messages_on_user_id_and_created_at_and_ancestry" 

答えて

0

ああ、今私が参照してください。あなたはschema.rbにコードを追加していますが、移行を使用していたschema.rbからあなた手動で追加したコードを削除して実行します。

rails g migration CreateMessages 

あなたは/移行/ファイルデシベルを取得します[タイムスタンプ] _create_messages.rb。を入力してくださいコードでメソッドを実行してから実行してください(あなたのために作成する必要がありますが、空でなければなりません)。それがup命名されている古いバージョン)の場合:

rake db:migrate 

このコマンドは、それ自体であなたのschema.rbを変更します。 手動で変更しないでください!(あなたが成熟したRailsプログラマーになるまで)。

+0

私にとってはうまくいきませんでした。私はadd_indexメソッドからt.string "ancestry"と "ancestry"を取り出して元の状態に戻しました。その後、私はレールを移動してCreateMessagesを実行し、私のためにrbファイルを作成しました。次に、上記のすべてのコードをコピーして上に貼り付けました。これはすべて正しいですか? – BigBoy1337

+0

しばらくお待ちください。 *元の状態に戻す* - 何を意味したのですか?あなたはすでにテーブルを持っていて、それにインデックスを追加したいだけですか?テーブルにインデックスを追加するだけでよいのであれば、 'up' /' change'メソッドは 'add_index ....'のみを含んでいなければなりません。また、 'up'メソッドがある場合、' remove'メソッドに 'remove_index、:name =>" ... "'を記入してください。 – jdoe

+0

@ user1123905、ほぼ正しいです。新しいrbファイルの上に、add_columnとadd_indexを呼び出す必要があります。これは、jdoeが指摘しているように、すでにテーブルがあるからです。 –

関連する問題