首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带布尔值的Rails作用域

带布尔值的Rails作用域
EN

Stack Overflow用户
提问于 2012-07-02 22:31:02
回答 4查看 14.3K关注 0票数 9

当您使用带有活动记录的Rails中的布尔值,并询问(例如) visible?时,它将检查该列是否为true。如果是falsenilvisible?将返回false

如何确定布尔值的范围以询问?方法是否返回false?我有这个:

代码语言:javascript
运行
AI代码解释
复制
scope :visible, where(hide: [nil, false])

但我想知道是否有更清洁的方法。有没有一种方法可以编写这个作用域而不显式地同时声明nilfalse?如果我们想要的是相反的话,我们可以直接写

代码语言:javascript
运行
AI代码解释
复制
scope :invisible, where(hide: true)

看上去更干净。可见作用域的最佳代码是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-02 23:33:50

在列上使用默认值。这有两个好的原因:您的DB中只有两个可能的值,这使得代码更容易编写。布尔人要么是真的,要么是假的,不是零,也不是也许,不是足底。对和错。对于布尔列,“我宁愿避免获得严格的false/true”这是一个模拟参数。

如果您需要两个以上的状态,请使用状态机或类似的东西--那么它不再是布尔列/状态了。

票数 9
EN

Stack Overflow用户

发布于 2012-07-03 00:08:59

我会选择:

代码语言:javascript
运行
AI代码解释
复制
scope :visible, -> { where(hide: false) }
scope :invisible, -> { where(hide: true) }

在SQL中,NULL表示缺少或未知的值,因此严格地说,使用hide = NULL的记录既不可见也不可见。

票数 15
EN

Stack Overflow用户

发布于 2012-12-02 21:50:08

几乎和斯特凡的回答一样,有点简化:

代码语言:javascript
运行
AI代码解释
复制
scope :visible, where(hide: false)
scope :invisible, where(:hide)

它适用于PostgreSQL,但我不确定它是否适用于其他数据库。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11305587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档