根据 api 文档:
如果您希望禁用此仿真(这是 0.13.1 及更早版本中的默认行为),您可以将以下行添加到您的 application.rb 文件中:
ActiveRecord::ConnectionAdapters::Mysql[2]Adapter.emulate_booleans = false
但是当我这样做时,我得到:
uninitialized constant ActiveRecord::ConnectionAdapters::Mysql2Adapter
根据 api 文档:
如果您希望禁用此仿真(这是 0.13.1 及更早版本中的默认行为),您可以将以下行添加到您的 application.rb 文件中:
ActiveRecord::ConnectionAdapters::Mysql[2]Adapter.emulate_booleans = false
但是当我这样做时,我得到:
uninitialized constant ActiveRecord::ConnectionAdapters::Mysql2Adapter
对于稍后看到此主题的人,我需要在Rails 3.2.0中要求具有完整路径的 mysql2_adapter ;
module MyApp
class Application < Rails::Application
require 'active_record/connection_adapters/mysql2_adapter'
ActiveRecord::ConnectionAdapters::Mysql2Adapter.emulate_booleans = false
end
end
我有同样的问题,我认为你有。但在我的情况下,我不想关闭 tinyint 模拟,而只是将遗留数据库的一些 tinyint 列设置为整数类型而不是布尔类型。搜索,我找到了解决问题的方法。Matt Jones ¹ 展示了 Rails 代码文档²,解释了如何:
class SomeModel < ActiveRecord::Base
attribute :a_tinyint_1_column_that_isnt_a_boolean, Type::Integer.new
end
¹ https://www.ruby-forum.com/topic/201859
² https://github.com/rails/rails/blob/daffea59db118fce4247d335eabea026cc54d7bc/activerecord/lib/active_record/attributes.rb#L17
文档不要求您在 application.rb 中要求 activerecord。要求它解决了这个问题。