当我在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的上下文中,布尔列的比较应该总是针对true或false,或者应该针对1和0。
在这个过程中,我确实意识到了一件事,之前的比较是在1(整数)和true(实际的布尔值)之间进行的,结果是false。现在我可以理解了,但我仍然无法克服这个逻辑之前对我来说是如何工作的。
我很想听听在Rails中进行这类检查的最佳实践。
3条答案
按热度按时间2ekbmq321#
不同的数据库以不同的方式存储布尔值。Mysql将它们存储为
0
或1
。这些被rails转换为false
和true
。通常你在Ruby代码中将它们视为布尔值。这个代码
都是多余你还不如直接说
因为无论哪种方式,结果都是相同的。
wgx48brx2#
正如**@Max威廉姆斯**所说,不同的数据库以不同的方式存储布尔值。
MySQL将它们存储为
0
或1
。因此调用is_admin == true
将返回true,调用is_admin == false
将返回false。对于
PostgreSQL
,它有很多方法对于
true
,有效值为对于
false
,有效值为**注意:**我只是比较了
MySQL
和PostgreSQL
中布尔值的存储方式,希望能帮到你。plicqrtu3#
如果你使用的是Mysql,技巧是添加一个问号(?):