简体   繁体   中英

warnings about case_sensitive can't be erased

When I test with rspec, below WARNING is displayed everytime.

DEPRECATION WARNING: Uniqueness validator will no longer enforce case sensitive comparison in Rails 6.1. To continue case sensitive comparison on the :email attribute in User model, pass `case_sensitive: true` option explicitly to the uniqueness validator. (called from block (2 levels) in <main> at /usr/src/app/spec/models/user_spec.rb:6)

So I tried to write this to User.rb(I expect case insensitive).

validates:email, uniqueness: { case_sensitive: false }

But, the WARNING can't be erased.

Next, I checked devise.rb(because I used devise and devise_token_auth). In devise.rb, it was written about case_insensitive.

config.case_insensitive_keys = [:email]

For your reference...

User.rb

# frozen_string_literal: true

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
  include DeviseTokenAuth::Concerns::User
  has_many :schedules

  validates :name, presence: true, length: { maximum: 10 }
  validates :email, uniqueness: { case_sensitive: false }
end

devise.rb

Devise.setup do |config|
  config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com'

  require 'devise/orm/active_record'

  config.case_insensitive_keys = [:email]

  config.strip_whitespace_keys = [:email]

  config.skip_session_storage = [:http_auth]

  config.stretches = Rails.env.test? ? 1 : 11

  config.reconfirmable = true

  config.expire_all_remember_me_on_sign_out = true

  config.password_length = 6..128

  config.email_regexp = /\A[^@\s]+@[^@\s]+\z/

  config.reset_password_within = 6.hours
  config.sign_out_via = :delete

end

Why rails don't stop WARNING?

thanks for your help.

You shuld be able to change in your User.rb

#User.rb

class User < ActiveRecord::Base
  ...
  # From  
  validates :email, uniqueness: { case_sensitive: false }
  # To
  validates_uniqueness_of :email, case_sensitive: true
end

I found this warning is caused by devise_token_auth gem.

So I changed setting in config/initializers/devise_token_auth.rb

config.default_callbacks = false

But after this change, all email validation by devise is disabled. So I decided to hide WARNING with below in config/application.rb

ActiveSupport::Deprecation.silenced = true if Rails.version == '6.0.2.2'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM