我怎么能检查表的存在

zyr*_*use 0 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

HY

很多时候我运行rake db:migrate我得到一个错误,因为表用户或foor或bar存在.我试图检查表的存在,但这不起作用,我不知道为什么.我使用rails 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
Run Code Online (Sandbox Code Playgroud)

小智 8

您可以使用以下命令检查表的存在.这个问题已在此处发布并回答.

ActiveRecord::Base.connection.table_exists? 'users'
Run Code Online (Sandbox Code Playgroud)

但是,您的代码包含错误.您无法if使用您正在使用的语法在块内定义方法.将块放在方法中,而不是.

def change
  if !table_exists?("users")
    # ...
  end
end
Run Code Online (Sandbox Code Playgroud)

此外,正如您所说,您不应经常遇到此类错误.迁移按顺序应用.users在向其添加Devise之前,在单独的迁移中创建表将解决该问题.如果从头开始迁移现有项目时遇到此问题,请考虑使用rake db:schema:load.