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

4
在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个回答

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中,因为这似乎更合适。


我尝试在最新的Rails 3版本中这样做(将其粘贴到application.rb的末尾),但是迁移出于某种原因不予考虑。 - Robert Rouse
嗯,在Rails 3.0.3版本中,我使用PostgreSQL数据库时是有效的(通过更改PostgreSQLAdapter中的相应选项)。你的确切Rails版本是什么? - Julian Mehnle

0
如果你正在使用mysql2适配器,请将上面的代码更改为:
require 'active_record/connection_adapters/mysql2_adapter'
ActiveRecord::ConnectionAdapters::Mysql2Adapter::NATIVE_DATABASE_TYPES[:primary_key] = ....

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接