エラーが発生しています:
SQLite3::SQLException: no such column: ideas.list_id:
SELECT "ideas".* FROM "ideas"
WHERE "ideas"."list_id" = 2
しかし、私は追加しました
t.integer :list_id
私のデータベース移行ファイルへ:
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が初めてです。他の方法で列を追加する必要がありますか?
ありがとう
Speranskyが示唆したように、古い移行ファイルを変更しないでください。むしろ、目的の列を追加する新しい移行を作成する必要があります。たとえば、この場合、アプリで次のコマンドを実行して新しい移行を作成します。
Rails generate migration AddListIdColumnToIdeas list_id:integer
そしてRailsは移行ファイルを自動的に生成し、あとはあとはrake db:migrate
。
古い移行ファイルの変更を主張する場合は、列を追加して、次を実行できます。
rake db:drop
rake db:create
rake db:migrate
これにより、現在のデータベースが破壊され、新しいデータベースが作成され、すべての移行が実行されます(新しい列が含まれます)。
既存のデータベースに新しい列を追加する場合は、Rails generate migration
を使用する必要があります。したがって、Rails generate migration add_list_id_to_ideas list_id:integer
を試してからrake db:migrate
を使用してこの変更をコミットできます。
古い移行に新しい行を追加しないでください。移行は、データベースを構築するステップです。また、最後に実行された移行の数はschema
に保存され、rake db:migrate
を使用する場合は実行もやり直しもされません。以前にテーブルを作成して移行を実行した場合は、add_column
メソッドを使用できる新しい移行を作成する必要があります。
また、これを行うことができます..
Rails g migration add_column_to_users list_id:string
次にrake db:migrate
ユーザーコントローラーのadd :list_id
属性も。
詳細については http://guides.rubyonrails.org/active_record_migrations.html をご覧ください。
Rails 4.0の簡単な方法単一または複数の列の追加https://Gist.github.com/pyk/8569812
移行ファイルの名前には、名前に日時がエンコードされているため、Railsこの移行を実行し、ロールバックを実行しない限り、再度実行しないでください。
ここに小さなステップでdbを構築する移行の魔法がありますので、rake db:migrateの実行後に移行を更新する必要はありません。dbスキーマに変更を加えるために新しい移行を行う必要があります
この移行をロールバックすることにした場合はエラーが発生する可能性があるため、古い移行ファイルから追加された行を削除します
既に移行フォルダーにファイルがある場合は、必要な列を追加するだけで(コードを入力するだけ)、development.sqliteまたはdbファイルを表すものを削除して、rake db:migrateを実行できます。次に、テーブルに新しい列を持つ新しいsqliteファイルを作成し、schema.rbで確認できます。
したがって、基本的に、データベースファイルを削除しなかったことを除いて、あなたがしたことはすべて良いようです。データベース内のすべてのファイルが失われますが、これを行うことは私にとって最も簡単なようです。 Railsアプリをテストおよび開発している場合、これは動作します。このアプローチに何か問題がある場合、私が書いたもの以外にコメントできますか?
編集:私は実際にここでその答えを見つけました 既存の編集Rails移行は良い考えですか?