簡體   English   中英

Authlogic NameError - 錯誤的常量名稱 Object.const_get(camel_cased_word)

[英]Authlogic NameError - wrong constant name Object.const_get(camel_cased_word)

我正在嘗試使用 rails 7 設置 Authlogic gem。我有簡單的 controller:

class UsersController < ApplicationController
  def new
    render_page 'Registration'
  end

  def create
    @user = User.new(email: 'codcore@gmail.com', password: 415561)
    if @user.save
      redirect_to root_url
    else
      render_page 'Registration', props: { errors: @user.errors_codes }
    end
  end

  private

  def user_params
    params.require(:user).permit(:name, :surname, :email, :password, :password_confirmation).to_h
  end
end

和簡單的User model:

class User < ApplicationRecord
  self.inheritance_column = 'there_is_no_sti_here'

  acts_as_authentic do |c|
    c.session_class = Session
    c.crypto_provider = ::Authlogic::CryptoProviders::BCrypt
  end
end

但是當我調用UsersControllercreate操作時,出現錯誤:

NameError - wrong constant name 
      Object.const_get(camel_cased_word)
            ^^^^^^^^^^:
  app/controllers/users_controller.rb:8:in `create'

該錯誤指的是UsersController中的@user.save 我不知道發生了什么。 我試圖調試這一行,但不明白發生了什么。 我還嘗試了 GitHub 存儲庫中的authlogic gem,但沒有幫助。

當我創建新的User實例然后從rails console保存它時,最有趣的部分都按預期工作......

看起來它在這里失敗了:

@klass ||= klass_name ? klass_name.constantize : nil

當它嘗試從您設置的 session_class 獲取 klass_name 時:

# The model name, guessed from the session class name, e.g. "User",
# from "UserSession".
#
# TODO: This method can return nil. We should explore this. It seems
# likely to cause a NoMethodError later, so perhaps we should raise an
# error instead.
#
# @api private
def klass_name
  return @klass_name if instance_variable_defined?(:@klass_name)
  @klass_name = name.scan(/(.*)Session/)[0]&.first
end

在這種情況下,您應該配置authenticate_with User或將Session重命名為UserSession ,以便它可以獲得正確的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM