Выполнение инструкции ниже, как ожидается, сохранит пользователя с тем же адресом электронной почты и UID: email == uid
:
Текущее поведение
user = User.create(email: 'myemail@gmail.com', password: '1' * 8, password_confirmation: '1' * 8)
user.email # 'myemail@gmail.com'
user.uid # nil
Исключенное поведение
user = User.create(email: 'myemail@gmail.com', password: '1' * 8, password_confirmation: '1' * 8)
user.email # 'myemail@gmail.com'
user.uid # 'myemail@gmail.com'
Что не так с моей моделью пользователя?Я помню, что когда я создавал нового пользователя, устройство автоматически заполняло uid пользователя электронной почтой.Я вставил код модели пользователя ниже, чтобы помочь отследить любой странный код.
Среда
- Ruby 2.4.1
- Rails 5.2.3
- Устройство 4.7.1
Модель пользователя
# frozen_string_literal: true
class User < ApplicationRecord # :nodoc:
attr_accessor :skip_password_validation
self.table_name = 'users'
include Status
enum role: Role.to_enum
# Include default devise modules.
devise :company_authenticatable, :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:confirmable, :timeoutable
belongs_to :person, class_name: 'Pessoa'
accepts_nested_attributes_for :person
belongs_to :company, class_name: 'Empresa'
has_many :permissions,
class_name: 'UserPermission',
dependent: :delete_all,
foreign_key: 'user_id'
accepts_nested_attributes_for :permissions
validates_associated :permissions
before_validation :load_predefined_permissions
# validations
validates :permissions, presence: true, if: -> { role.to_s == 'custom' }
validates_presence_of :role, :person
def timeout_in
15.minutes
end
def active_for_authentication?
super && account_active?
end
def account_active?
manager? || (ativo? && permissions.count.positive?)
end
def skip_password_validation?
['true', true, 1, '1'].include?(skip_password_validation)
end
def permission?(subject_class, action)
permissions.any? { |permission| permission.subject_class == subject_class && permission.action == action }
end
def cached_permissions
Rails.cache.fetch("#{cache_key_with_version}/permissions") do
permissions
end
end
def clear_cached_data
Rails.cache.delete("#{cache_key_with_version}/permissions")
end
protected
def password_required?
return false if skip_password_validation?
super
end
private
def load_predefined_permissions
return if role.to_s == 'custom' || manager? || (!role_changed? && !permissions.empty?)
self.permissions = UserPermission.initialize_by_user(self)
end
end