0

ハイ

rake db:migrate を実行すると、多くの場合、テーブル user または foor または bar が存在するため、エラーが発生します。テーブルの存在を確認しようとしましたが、うまくいかず、理由がわかりません。私はレール3.2.2を使用しています

class AddDeviseToUsers < ActiveRecord::Migration

    #def self.table_exists?(users)
    #  ActiveRecord::Base.connection.tables.include?(users)
    #end

     if !table_exists?("users")
        def change
          create_table(:users) do |t|
             ## Database authenticatable
           t.string :email, :null => false, :default => ""
           t.string :encrypted_password, :null => false, :default => ""
    end
  end
end
4

3 に答える 3

8

次のコマンドでテーブルの存在を確認できます。この質問はすでに投稿されており、ここで回答されています。

ActiveRecord::Base.connection.table_exists? 'users'

ただし、コードにエラーが含まれています。if使用している構文でブロック内にメソッドを定義することはできません。代わりに、ブロックをメソッド内に配置してください。

def change
  if !table_exists?("users")
    # ...
  end
end

また、あなたが述べているように、この種のエラーが頻繁に発生するべきではありません。移行は順次適用されます。usersDevise を追加する前に別の移行でテーブルを作成すると、その問題が解決されます。既存のプロジェクトを最初から移行しているときにこの問題が発生した場合は、rake db:schema:load代わりに使用することを検討してください。

于 2013-11-14T00:16:23.467 に答える
0

コマンド ターミナルで入力すると sqlite3 db/development.sqlite3 、SQL コマンドでデータベースを検索できます。データベース内のすべてのテーブルをリストするために使用.tablesすると、自分のテーブルが欠落しているかどうかを確認できます。

スキーマ ファイルを見て、移行が機能したかどうかを確認することもできます。テーブルとそのすべての属性がそこにリストされます。

于 2013-11-13T23:56:39.097 に答える
0

両方が同じテーブルを作成しようとする複数の移行を行うべきではありません。また、Rails マイグレーションを正しく行っている場合、このようなエラーは発生しないはずです。

Rails マイグレーションの仕組みは、 を実行するrake db:migrateたびに、正常に実行されるすべてのマイグレーション ファイルについて、マイグレーション ファイルの番号部分123456789_create_users_table.rb(この場合は 123456789) を という名前の db 内のテーブルに格納することschema_migrationsです。このようにして、移行が既に実行されている場合、再度実行されることはありません。

レールの移行を正しく行っているようには思えません。これをよく読むことをお勧めします: http://guides.rubyonrails.org/migrations.html

于 2013-11-14T15:39:36.543 に答える