【问题标题】:Rails interpretes boolean 1 as falseRails 将布尔值 1 解释为 false
【发布时间】: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


【解决方案1】:

我通过将 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>]>

抱歉耽误了你的时间。

【讨论】:

    猜你喜欢
    • 2012-09-12
    • 1970-01-01
    • 2012-01-30
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多