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默认为true。

解决这个问题的最佳方法是什么?理想情况下,它应该可以正常工作,默认情况下,布尔列应该返回布尔值而不是字符串。

4

3 回答 3

4

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

'bool' 不是 Rails 迁移的有效数据类型。您需要使用“布尔值”。我的猜测是'bool' 正在获取在数据库中创建的列,但是当将数据加载到模型中时,Rails 会感到困惑。更改并重新运行迁移,我敢打赌一切正常。

于 2013-04-01T17:52:07.800 回答
0

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

但是您可以在 RoR 逻辑中使用传统的真/假。给定一个具有名为“活动”的布尔属性的用户模型,您可以这样做

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

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

干杯

于 2013-04-01T09:32:39.377 回答
0

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

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

不知道为什么会做出这个选择。

于 2015-04-03T01:30:31.590 回答