2010-06-22 5 views
4

Dans Rails 3, comment changer le type de clé primaire par défaut pour, par exemple, BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEYDans Rails/ActiveRecord 3, comment modifier le type de clé primaire par défaut pour MySQL?

Dans mon cas, je ne suis intéressé que par MySQL.

Pour Rails 2, vous pouvez voir la réponse à la question "Comment utiliser les ID longs dans Rails?" 1

Dans Rails 3, cependant, une erreur est générée. Je ne sais pas si c'est parce que la classe n'est plus utilisée, ou si le code doit aller au même endroit. Vous pouvez voir dans active_record/connection_adapters/mysql_adapter.rb que la constante NATIVE_DATABASE_TYPES est encore définie.

Quelle est la manière correcte d'obtenir le même effet dans Rails 3?

Répondre

1

Le problème est que les adaptateurs de connexion sont maintenant chargés paresseusement après l'exécution de tous les initialiseurs.

Essayez d'exiger explicitement le module de code que vous êtes singe-patching:

require 'active_record/connection_adapters/mysql_adapter' 
ActiveRecord::ConnectionAdapters::MysqlAdapter::NATIVE_DATABASE_TYPES[:primary_key] = 
    "BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY".freeze 

Je ne sais pas si vous ajoutez cela à config/environment.rb fonctionne toujours. Je l'ai ajouté à config/application.rb à la place de toute façon, car il semblait plus approprié.

+0

J'ai essayé de le faire dans les plus récents Rails version 3 (coller à la fin de application.rb) et les migrations don ne le respecte pas pour une raison quelconque. –

+0

Eh bien, cela a fonctionné pour moi sur Rails 3.0.3 avec une base de données PostgreSQL (en changeant l'option correspondante dans PostgreSQLAdapter). Quelle est votre version exacte de Rails? –

0

si vous utilisez l'adaptateur mysql2, modifiez le code ci-dessus:

require 'active_record/connection_adapters/mysql2_adapter' 
ActiveRecord::ConnectionAdapters::Mysql2Adapter::NATIVE_DATABASE_TYPES[:primary_key] = .... 
Questions connexes