【发布时间】:2018-05-30 11:01:09
【问题描述】:
我有一个烦人的问题:我想将用户标记为已删除,因此我创建了一个名为“已删除”的布尔数据库列并将用户标记为已删除。现在,当我搜索它时:
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 并得到一条记录 where deleted = false ???
我需要这个来进行我正在编写的测试:
expect(user_after_deletion.deleted).to be true
但 user.deleted 始终为 false,即使 1 存储在 db 中。
使用“emailverified”字段,一切都按预期工作。这些列都是 tinyint(1)。
我尝试重命名该列,但仍然没有成功。
谁能指出我正确的方向? 谢谢!
附: 用户.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
【问题讨论】:
-
或者您使用自定义
enum映射到整数 -
你能从 Rails 控制台发布
User的输出吗? -
确定:2.5.0 :001 > 用户 => 用户(调用 'User.connection' 建立连接)
-
如果您发布
User的模型代码和数据库迁移会有所帮助。 -
添加了一些信息和用户模型和迁移 - 感谢大家的时间和帮助
标签: ruby-on-rails boolean