[英]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
但是當我調用UsersController
的create
操作時,出現錯誤:
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.