ActiveRecord布尔值返回“f”,“t”

时间:2013-04-01 09:21:06

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

我在活动记录迁移中添加了一个布尔列

class AddIncludeInConsolidationToCompanies < ActiveRecord::Migration
  def change
    add_column :companies, :include_in_consolidation, :bool, :default => true
  end
end

每当我从数据库中获取记录时,我都会得到“f”或“t”而不是true或false。

activerecord不应该自动处理与数据库之间的类型转换。

就像ActiveRecord::Base.connection.quoted_true/false默认为真。

最好的方法是什么?理想情况下它应该正常工作,布尔列应该返回一个布尔值,默认情况下不是字符串。

3 个答案:

答案 0 :(得分:3)

't'和'f'是PostgreSQL用于布尔值的内容。

'bool'不是Rails迁移的有效数据类型。你需要使用'boolean'。我的猜测是'bool'正在获取在数据库中创建的列,但是当数据加载到模型中时Rails会感到困惑。改变并重新运行迁移,我打赌一切都会成功。

答案 1 :(得分:0)

可能我错了,但是在PostgreSQL中,布尔值被保存为'f'或't'。

但是你可以在你的RoR逻辑中使用传统的true / false。给定具有名为“active”的布尔属性的User模型,您可以执行

 if !user.active?
   # do something
 else
   # do something else
 end

正如您所见,真/假测试工作正常......

干杯

答案 2 :(得分:0)

  

虽然在postgresql中使用t和f输出布尔值,但关键字TRUE和FALSE是首选(符合SQL的)用法:“

http://www.postgresql.org/docs/9.4/static/datatype-boolean.html

不确定为何选择此选项。