在Rails中检查布尔值的正确方法

时间:2014-05-16 14:38:19

标签: mysql ruby-on-rails comparison boolean tinyint

当我尝试在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中进行这些检查的最佳实践。谢谢。

3 个答案:

答案 0 :(得分:1)

不同的数据库以不同的方式存储布尔值。 Mysql将它们存储为01。它们被rails转换为falsetrue。通常,您在红宝石代码中将它们视为布尔值。

此代码

if is_admin == true

是多余的。你不妨只说

if is_admin

因为结果将是相同的。

答案 1 :(得分:0)

正如 @Max Williams 所述,不同的数据库以不同的方式存储布尔值。

MySQL将它们存储为01。因此调用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'

注意:我刚刚比较了MySQLPostgreSQL中布尔值的存储方式,以便它清除您的困惑。我希望它肯定可以帮助您

答案 2 :(得分:0)

如果您使用的是Mysql,诀窍是添加一个问号(?):

is_admin => 0 
is_admin? => false