我在活动记录迁移中添加了一个布尔列
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
默认为真。
最好的方法是什么?理想情况下它应该正常工作,布尔列应该返回一个布尔值,默认情况下不是字符串。
答案 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
不确定为何选择此选项。