Comment vérifier le type de firebase database dans une migration de Rails?

J’ai la migration suivante et je veux pouvoir vérifier si la firebase database actuelle liée à l’environnement est une firebase database mysql. Si c’est mysql, je veux exécuter le SQL spécifique à la firebase database.

Comment puis-je m’y prendre?

 class AddUsersFb <ActiveRecord :: Migration

   def self.up
     add_column: users,: fb_user_id,: integer
     add_column: users,: email_hash,: string
     #si mysql
     #execute ("alter utilisateurs de table modifie fb_user_id bigint")
   fin

   def self.down
     remove_column: utilisateurs,: fb_user_id
     remove_column: users,: email_hash
   fin

 fin

ActiveRecord::Base.connection vous fournira tout ce que vous avez toujours voulu savoir sur la connexion à la firebase database établie par boot.rb et environment.rb

ActiveRecord::Base.connection renvoie beaucoup d’informations. Donc, vous devez savoir exactement ce que vous cherchez.

Comme le souligne Marcel:

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

est probablement la meilleure méthode pour déterminer si votre firebase database MySQL.

Bien que je me ActiveRecord aux informations internes susceptibles de changer entre les versions d’ ActiveRecord , je préfère le faire de cette façon:

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

Appel encore plus court

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

Il existe un adapter_name dans AbstractAdapter et il existe depuis Rails2.

Il est donc plus facile à utiliser dans la migration comme ceci:

 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 

Dans Rails 3 (peut-être plus tôt, mais j’utilise actuellement Rails 3) en utilisant ActiveRecord :: ConnectionAdapters :: MysqlAdapter est un mauvais moyen, car il n’est initialisé que si l’adaptateur de firebase database utilisé est MySQL. Même si la gem MySQL est installée, si ce n’est pas votre type de connexion, cet appel échouera:

 Loading development environment (Rails 3.0.3) >> ActiveRecord::Base.connection.instance_of? ActiveRecord::ConnectionAdapters::MysqlAdapter NameError: uninitialized constant ActiveRecord::ConnectionAdapters::MysqlAdapter from (irb):1 

Je recommande donc la réponse de stasl et utilise la propriété nom_adaptateur de la connexion.

Cela pourrait aider:

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