在Rails / ActiveRecord 3中,如何更改MySQL的默认主键类型?

时间:2010-06-22 21:41:58

标签: ruby-on-rails ruby activerecord ruby-on-rails-3

在Rails 3中,如何将默认主键类型更改为BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY

就我而言,我只对MySQL感兴趣。

对于Rails 2,您可以看到“如何在Rails中使用长ID?”1

的答案

然而,在Rails 3中,这将引发错误。我不确定是不是因为该类不再使用,或者代码需要在同一个地方。您可以在active_record/connection_adapters/mysql_adapter.rb中看到仍然定义了NATIVE_DATABASE_TYPES常量。

在Rails 3中实现相同效果的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

问题是连接适配器现在在所有初始化程序运行后懒洋洋地加载。

尝试明确要求您进行猴子修补的代码模块:

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

我不知道将此添加到config/environment.rb是否仍然有效。无论如何,我将其添加到config/application.rb,因为它似乎更合适。

答案 1 :(得分:0)

如果您使用的是mysql2适配器,请将以上代码更改为:

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