ruby-on-rails 在Rails中检查布尔值的正确方法

jm81lzqq  于 2023-04-22  发布在  Ruby
关注(0)|答案(3)|浏览(189)

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

2ekbmq32

2ekbmq321#

不同的数据库以不同的方式存储布尔值。Mysql将它们存储为01。这些被rails转换为falsetrue。通常你在Ruby代码中将它们视为布尔值。
这个代码

if is_admin == true

都是多余你还不如直接说

if is_admin

因为无论哪种方式,结果都是相同的。

wgx48brx

wgx48brx2#

正如**@Max威廉姆斯**所说,不同的数据库以不同的方式存储布尔值。
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中布尔值的存储方式,希望能帮到你。

plicqrtu

plicqrtu3#

如果你使用的是Mysql,技巧是添加一个问号(?):

is_admin => 0 
is_admin? => false

相关问题