1

当我尝试在 Rails 中检查布尔值时遇到问题。早些时候,我的条件用于检查布尔值是否为 1 或 0,这很有效。但是最近,这不再起作用了。

当我在 mysql 级别检查它们时,布尔值存储为 tinyint(1),值为 1 和 0。但是当我在 rails development.log 中打印这些值时,它们分别显示为 true 和 false。

Earlier comparison logic
is_admin == 1

当我现在检查真假而不是 1 和 0(因为最近的问题)时,一切正常。我不知道为什么这在我之前没有失败。

Current comparison logic
is_admin == true

我也不是 100% 相信布尔列的比较应该在 Rails 的上下文中始终与 true 或 false 进行比较,或者它应该针对 1 和 0。

任何人都可以请对此有所了解。

我在此过程中确实意识到的一件事是,早期的比较是在 1(整数)和 true(实际布尔值)之间进行的比较结果为 false。我现在可以理解这一点,但我仍然无法理解这种逻辑在早些时候对我来说是如何工作的。

任何见解都会对此有所帮助。请推荐在 Rails 中进行此类检查的最佳实践。谢谢你。

4

3 回答 3

1

不同的数据库以不同的方式存储布尔值。Mysql 将它们存储为0or 1。这些被转化为轨道false并由true轨道翻译。通常,您在 ruby​​ 代码中将它们视为布尔值。

这段代码

if is_admin == true

是多余的。你不妨说

if is_admin

因为无论哪种方式结果都是一样的。

于 2014-05-16T15:00:38.927 回答
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'

注意:我只是比较了布尔值如何存储在MySQLandPostgreSQL中,以便消除您的困惑。我希望它对您有所帮助。

于 2014-05-16T15:09:16.863 回答
0

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

is_admin => 0 
is_admin? => false
于 2019-05-15T21:29:06.537 回答