徒然なるままに

個人の備忘録を中心としたブログです

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
>rails g model example 
で作成したモデルのマイグレーションが
>rake db:migrate
SQLite3::SQLException: table "examples" already exists




のようにエラーで通らなくなった。

原因は
>rails g model example
>rake db:migrate
した後に、db:migrate:rollback あるいは db:migrate:down VERSION=xxxxxxxxx をせずに
>rails d model example
して再度 generate して作り直したから。

要するに db:migrate:down してから rails d model example しておけば、
xxxxxxxxxx_create_examples.rb 内のchangeメソッド中のcreate(down時にはdropになる)が実行され、
テーブルが削除されるのに、それをしなかったということです。


ということで再度 db:migrate を通すために、examplesテーブルを削除してやる必要があります。


解決方法1、sqlite3で直接テーブルを削除する(推奨)
>sqlite3 db/development.sqlite3
sqlite> .tables # テーブル一覧
examples members schema_migrations
sqlite> drop table examples;
sqlite> .tables
members schema_migrations


解決方法2、xxxxxxxxxxx_create_examples.rb内で create table する前に、 drop table する
class CreateExamples < ActiveRecord::Migration
def change
drop_table :examples
create_table :examples do |t|
  ・
  ・
  ・


その後、
>db:migrate
をやれば通りました。

参考元
http://stackoverflow.com/questions/8589874/rake-dbmigrate-an-error-has-occurred-this-and-all-later-migrations-canceled

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://kamiyasu2.blog.fc2.com/tb.php/40-35dfc6e5

kamiyasu

Author:kamiyasu

QR

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。