У меня раздражающая проблема: я хочу пометить пользователей как удаленных, поэтому я создал логический столбец БД с именем «удаленный» и пометил пользователя как удаленного.Теперь, когда я ищу его:
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 как ложное?Один должен быть верным, как показывает следующий поиск:
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>]>
Поэтому я ищу удаленный = true и получаю запись, где удалено = false ???
Мне это нужно длятест, который я пишу:
expect(user_after_deletion.deleted).to be true
Но user.deleted всегда ложен, даже когда 1 хранится в БД.
С полем «emailverified» все работает как положено.Обе колонки имеют тип tinyint (1).
Я пытался переименовать колонку, но все же не повезло.
Может кто-нибудь указать мне правильное направление?Спасибо!
PS: user.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