当我尝试在Rails中检查布尔值时,我遇到了问题。之前我的条件用于检查一个布尔值对1或0,这是有效的。但最近,这不再适用了。
当我在mysql级别检查它们时,布尔值被存储为tinyint(1),其值为1和0.但是当我在rails development.log中打印这些值时,它们分别为true和false。
Earlier comparison logic
is_admin == 1
当我现在检查true和false而不是1和0(因为最近的问题)时,事情很有效。我不确定为什么这对我来说没有失败。
Current comparison logic
is_admin == true
我也不是100%确信在Rails的上下文中应该对一个布尔列进行比较,或者它应该是针对1和0。
任何人都可以对此有所了解。
我在这个过程中意识到的一件事是,早期的比较是说1(整数)和真(实际的布尔)评估为假。我现在可以理解,但是我仍然无法克服这个逻辑对我来说是如何起作用的。
任何见解对此都有帮助。请建议在Rails中进行这些检查的最佳实践。谢谢。
答案 0 :(得分:1)
不同的数据库以不同的方式存储布尔值。 Mysql将它们存储为0
或1
。它们被rails转换为false
和true
。通常,您在红宝石代码中将它们视为布尔值。
此代码
if is_admin == true
是多余的。你不妨只说
if is_admin
因为结果将是相同的。
答案 1 :(得分:0)
正如 @Max Williams 所述,不同的数据库以不同的方式存储布尔值。
MySQL将它们存储为0
或1
。因此调用is_admin == true
将返回true并且调用is_admin == false
将返回false。
说到PostgreSQL
,它有很多种方法
对于true
,有效值为
TRUE,'t','true','y','yes'and '1'
对于false
,有效值为
FALSE,'f','false','n','no' and '0'
注意:我刚刚比较了MySQL
和PostgreSQL
中布尔值的存储方式,以便它清除您的困惑。我希望它肯定可以帮助您
答案 2 :(得分:0)
如果您使用的是Mysql,诀窍是添加一个问号(?):
is_admin => 0
is_admin? => false