我进行了以下迁移,希望能够判断与环境相关的当前数据库是否是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建立的数据库连接的所有信息

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

正如马塞尔指出的:

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

这可能是确定数据库是否为MySQL的最佳方法.

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

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

Ruby-on-rails相关问答推荐

在Ruby on rails中,重复访问ActiveRecordModel返回相同的对象:预期行为还是错误?

在控制器操作中适当使用ActiveModel Dirty

使用ActiveSupport::TimeWithZone将UTC转换为用户定义的时区

在Ruby中按特定值合并时,将两个对象数组添加到一起

序列化来自关联的不可变数据是个好主意吗?

Rails 连接并包含连接表中的列

Rails - 如何使用子对象的嵌套属性和强参数填充父对象ID?

Ruby on Rails 有没有好的管理生成器?

如何使用 Vim 插入 ERB 标签?

Ruby的自动代码质量工具?

如何从 Rails 路由中删除控制器名称?

OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server hello A

将根 url 重定向到 Rails 应用程序中的其他位置

在 Rails 中创建随机 DateTime 的最佳方法

我如何找出为什么我不能#destroy() 记录?

Ruby on Rails 中的MySQL 服务器已经消失

rbenv:没有 gemsets 生存

如果多态关联的类型列不指向 STI 的基本模型,为什么多态关联对 STI 不起作用?

如何从另一个调用 Capistrano 任务?

Postgresql JSON 数据列不同