【发布时间】:2014-04-15 07:14:11
【问题描述】:
我正在使用列名为“活动”的“客户”表。列的类型是 tinyint(1)(布尔值)。对于特定客户,该列在数据库中的值为 1。以下是我在 Rails 控制台上看到的客户记录。
2.1.0 :029 > customer.active
=> true
2.1.0 :030 > customer.active?
=> false
不应该是“customer.active”吗?返回真而不是假?我通过将列名重命名为“启用”来检查。在这种情况下,它对“customer.enabled”和“customer.enabled?”都返回true。是因为在 Rails 或 ActiveRecord 代码中将“活动”词用于其他目的吗?
【问题讨论】:
-
我会设置一个调试器,单步执行每个
.active调用,然后看看结果如何! C-; -
活跃的?函数是自动生成的,表格的每一列也会有一个相应的函数像这样生成。我不确定这些的功能是什么。
-
@vee 实际上,我认为 rails (4) 对抽象 tinyint(1) 列有一些魔力。在我的项目中,该类型的列将给出真或假(即使该值手动设置为 1 或 0)。在我的情况下,返回的值与查询表单“?”一致,我不知道为什么 OP 会出现不一致。
标签: ruby-on-rails