ruby-on-rails - rails添加controller - 创建rails项目




如何在Rails迁移中检查数据库类型? (4)

AbstractAdapter有一个adapter_name ,自Rails2以来就是这样。

因此,在迁移中使用更容易,如下所示:

adapter_type = connection.adapter_name.downcase.to_sym
case adapter_type
when :mysql
  # do the MySQL part
when :sqlite
  # do the SQLite3 part
when :postgresql
  # etc.
else
  raise NotImplementedError, "Unknown adapter type '#{adapter_type}'"
end

我有以下迁移,我希望能够检查与环境相关的当前数据库是否是一个mysql数据库。 如果是mysql,那么我想执行特定于数据库的SQL。

我该怎么做?

class AddUsersFb < ActiveRecord::Migration

  def self.up
    add_column :users, :fb_user_id, :integer
    add_column :users, :email_hash, :string
    #if mysql
    #execute("alter table users modify fb_user_id bigint")
  end

  def self.down
    remove_column :users, :fb_user_id
    remove_column :users, :email_hash
  end

end

ActiveRecord::Base.connection将为您提供有关boot.rbenvironment.rb建立的数据库连接的boot.rb

ActiveRecord::Base.connection返回大量信息。 所以你必须确切地知道你在寻找什么。

正如马塞尔指出:

ActiveRecord::Base.connection.instance_of? 
  ActiveRecord::ConnectionAdapters::MysqlAdapter 

可能是确定您的数据库MySQL的最佳方法。

尽管依赖于可能在ActiveRecord版本之间发生变化的内部信息,我更喜欢这样做:

ActiveRecord::Base.connection.instance_values["config"][:adapter] == "mysql"

更短的电话

ActiveRecord::Base.connection.adapter_name == 'MySQL'

这可能有所帮助:

execute 'alter table users modify fb_user_id bigint WHERE USER() = "mysqluser";'







rails-migrations