20

エラーが発生します:

SQLite3::SQLException: no such column: ideas.list_id: 
SELECT "ideas".* FROM "ideas"  
WHERE "ideas"."list_id" = 2

しかし、私は追加しました

t.integer :list_id

私のdb移行ファイルに:

class CreateIdeas < ActiveRecord::Migration
  def change
    create_table :ideas do |t|
      t.string :name
      t.text :description
      t.string :picture

      t.timestamps
    end
    add_foreign_key :ideas, :lists
  end
end

これは私にこれを与えました:

class CreateIdeas < ActiveRecord::Migration
  def change
    create_table :ideas do |t|
      t.string :name
      t.text :description
      t.string :picture
      t.integer :list_id
      t.timestamps
    end
    add_foreign_key :ideas, :lists
  end
end

そして、私はタイプしました

rake db:migrate

列がないというエラーが表示される理由は何ですか? RoR はまだ初心者です。他の方法で列を追加する必要がありますか?

ありがとう

4

7 に答える 7

56

Speransky が示唆したように、古い移行ファイルは決して変更しないでください。むしろ、目的の列を追加する新しい移行を作成する必要があります。たとえば、この場合、アプリで次のコマンドを実行して、新しい移行を作成します。

rails generate migration AddListIdColumnToIdeas list_id:integer

そして、Rails は自動的に移行ファイルを生成するので、あとは run を実行するだけですrake db:migrate

古い移行ファイルを変更する必要がある場合は、行ったように列を追加して、次を実行できます。

rake db:drop
rake db:create
rake db:migrate

これにより、現在のデータベースが破棄され、新しいデータベースが作成され、すべての移行が実行されます (これには新しい列が含まれます)。

于 2013-04-28T05:02:38.253 に答える
3

既存のデータベースに新しい列を追加する場合は、rails generate migration. したがって、この変更をコミットしてからrails generate migration add_list_id_to_ideas list_id:integer使用できます。rake db:migrate

于 2013-04-28T05:06:19.343 に答える
2

古い移行に新しい行を追加しないでください。移行は、データベースを構築するためのステップです。最後に実行されたマイグレーションの回数は に保存されschema、 を使用しても実行またはやり直しはされませんrake db:migrate。以前にテーブルを作成して移行を実行した場合は、add_columnメソッドを使用できる新しい移行を作成する必要があります。

于 2013-04-28T04:45:36.577 に答える
1

移行ファイル名にはその名前に日時がエンコードされているため、レールはこの移行を実行し、ロールバックを実行しない限り再度実行しません

そして、小さなステップでデータベースを構築するための移行の魔法が来るので、 rake db:migrate を実行した後に移行を更新する必要はありません。新しい移行を作成して、db スキーマに必要な変更を行う必要があります。

そして忘れないで

この移行をロールバックするとエラーが発生する可能性があるため、古い移行ファイルから追加された行を削除します。

于 2013-04-28T05:04:09.017 に答える
1

単一または複数の列 を追加する Rails 4.0 の簡単な方法https://gist.github.com/pyk/8569812

于 2015-05-29T11:34:19.647 に答える
1

これを行うこともできます..

rails g migration add_column_to_users list_id:string

それからrake db:migrate

またadd :list_id、ユーザーコントローラーの属性;

詳細については、 http: //guides.rubyonrails.org/active_record_migrations.htmlをご覧ください。

于 2017-04-04T07:50:50.593 に答える