ruby-on-rails - Rails 将布尔值 1 解释为 false
问题描述
我有一个烦人的问题:我想将用户标记为已删除,因此我创建了一个名为“已删除”的布尔数据库列并将用户标记为已删除。现在,当我搜索它时:
ds = User.where(deleted: 1)
User Load (0.8ms) SELECT `users`.* FROM `users` WHERE `users`.`deleted` = 1 LIMIT 11
=> #<ActiveRecord::Relation [#<
User id: 4,
vname: "Max",
nname: "Muster",
...
emailverified: true,
deleted: false>]>
为什么 Rails 将 1 解释为 false?一个应该是真的,如以下搜索所示:
ds = User.where(deleted: true)
User Load (0.8ms) SELECT `users`.* FROM `users` WHERE `users`.`deleted` = 1 LIMIT 11
=> #<ActiveRecord::Relation [#<
User id: 4,
vname: "Max",
nname: "Muster",
...
emailverified: true,
deleted: false>]>
所以我搜索 deleted = true 并得到一条记录,其中 deleted = false ???
我需要这个来进行我正在编写的测试:
expect(user_after_deletion.deleted).to be true
但 user.deleted 始终为 false,即使 1 存储在数据库中。
使用“emailverified”字段,一切都按预期工作。这些列都是 tinyint(1)。
我试图重命名该列,但仍然没有运气。
谁能指出我正确的方向?谢谢!
PS:用户.rb
class User < ApplicationRecord
attr_accessor :passwd_upd
belongs_to :entitlement
after_initialize :set_uid
has_secure_password
has_many :user_histories
def self.automatic_deletion
User.where("created_at > ?", (Time.now - 24.hours)).each do |u|
u.deleted = true
u.save(validate: false)
end
end
def undelete
self.deleted = false
end
end
以及相应的迁移。
class AddDeletedToUsers < ActiveRecord::Migration[5.1]
def change
add_column :users, :deleted, :boolean
end
end
解决方案
我通过将 Rails 从 5.1.4 更新到 5.2 来“解决”它。
现在我得到:
ds = User.where(deleted: true)
User Load (0.8ms) SELECT `users`.* FROM `users` WHERE `users`.`deleted` = 1 LIMIT 11
=> #<ActiveRecord::Relation [#<
User id: 4,
vname: "Max",
nname: "Muster",
...
emailverified: true,
deleted: true>]>
很抱歉偷走了你的时间。
推荐阅读
- sql - 需要帮助为我的数据库编写 sql 查询
- gradle - 如何从另一个自定义插件应用 Kotlin jvm 插件?
- java - 从列表视图数组中拨打电话号码
- azure - Azure Kubernetes 服务 (AKS) 托管集群的安全模型
- python-3.x - 熊猫找到每小时滚动平均值
- django - Django:如何将模型一对象与模型二以形式链接?
- java - 用于链表拆分问题的合并排序的 Java 实现
- angular - 捕获输入值并在使用角度材料输入的按钮单击时显示值
- swift - 如何使用 DJI Mobile SDK 从 mavic pro 重新获取视频?
- javascript - 如何在不使用全局范围或 redux 的情况下在 react-native 中使用全局变量?