Ruby on rails 未定义的局部变量或方法“signin';对于#<;等级:0x31fa7f0>;
我在模型类中有以下错误。如何处理这些错误Ruby on rails 未定义的局部变量或方法“signin';对于#<;等级:0x31fa7f0>;,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,我在模型类中有以下错误。如何处理这些错误 class User < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :r
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessor :signin
validates :username, :uniqueness => {:case_sensitive => false}
def self.find_first_by_auth_conditions(warden_conditions)
puts warden_conditions
conditions = warden_conditions.dup
where(conditions).where(["lower(username) = :value OR
lower(email)= :value", { :value => signin.downcase }]).first
end
end
class用户{:区分大小写=>false}
定义self.find_first_by_auth_条件(典狱长条件)
把监狱长的情况
条件=典狱长_conditions.dup
其中(条件)。其中([“下(用户名)=:值或
lower(email)=:value“,{:value=>signin.downcase}])。首先
结束
结束
我不熟悉rails,从实践中学习。如何调试此类问题。如果我在模型中遇到这样的错误,我应该首先看哪里。这个方法来自
design
,用于通过配对用户名和电子邮件或其他方式进行身份验证。
您在signin
变量中遇到问题,我使用login
查看我的代码:
def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
if login.start_with?('+')
where(["phone = :value AND phone_confirm = :phone_confirm", { value: login.downcase, phone_confirm: true }]).first
else
where(["lower(email) = :value", { value: login.downcase }]).first
end
else
where(conditions).first
end
end
此方法来自
designe
,用于通过配对用户名和电子邮件或其他方式进行身份验证。
您在signin
变量中遇到问题,我使用login
查看我的代码:
def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
if login.start_with?('+')
where(["phone = :value AND phone_confirm = :phone_confirm", { value: login.downcase, phone_confirm: true }]).first
else
where(["lower(email) = :value", { value: login.downcase }]).first
end
else
where(conditions).first
end
end
此方法来自
designe
,用于通过配对用户名和电子邮件或其他方式进行身份验证。
您在signin
变量中遇到问题,我使用login
查看我的代码:
def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
if login.start_with?('+')
where(["phone = :value AND phone_confirm = :phone_confirm", { value: login.downcase, phone_confirm: true }]).first
else
where(["lower(email) = :value", { value: login.downcase }]).first
end
else
where(conditions).first
end
end
此方法来自
designe
,用于通过配对用户名和电子邮件或其他方式进行身份验证。
您在signin
变量中遇到问题,我使用login
查看我的代码:
def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
if login.start_with?('+')
where(["phone = :value AND phone_confirm = :phone_confirm", { value: login.downcase, phone_confirm: true }]).first
else
where(["lower(email) = :value", { value: login.downcase }]).first
end
else
where(conditions).first
end
end
attr\u accessor:signin
为类实例定义一个访问器
问题是您试图在类方法的作用域中访问它,因此它是未定义的。您想要的功能是基于以下两部分执行查询:
- 监狱长
- 用户名资料
def self.find_first_by_auth_conditions(warden_conditions, user)
warden_stuff(warden_conditions).user_stuff(user).first
# or where(warden_conditions).user_stuff(user).first
end
因此,它可以用作user=user.find\u first\u by\u auth\u conditions(the\u conditions.dup,a\u user)
attr\u accessor:signin
定义类实例的访问器
问题是您试图在类方法的作用域中访问它,因此它是未定义的。您想要的功能是基于以下两部分执行查询:
- 监狱长
- 用户名资料
def self.find_first_by_auth_conditions(warden_conditions, user)
warden_stuff(warden_conditions).user_stuff(user).first
# or where(warden_conditions).user_stuff(user).first
end
因此,它可以用作user=user.find\u first\u by\u auth\u conditions(the\u conditions.dup,a\u user)
attr\u accessor:signin
定义类实例的访问器
问题是您试图在类方法的作用域中访问它,因此它是未定义的。您想要的功能是基于以下两部分执行查询:
- 监狱长
- 用户名资料
def self.find_first_by_auth_conditions(warden_conditions, user)
warden_stuff(warden_conditions).user_stuff(user).first
# or where(warden_conditions).user_stuff(user).first
end
因此,它可以用作user=user.find\u first\u by\u auth\u conditions(the\u conditions.dup,a\u user)
attr\u accessor:signin
定义类实例的访问器
问题是您试图在类方法的作用域中访问它,因此它是未定义的。您想要的功能是基于以下两部分执行查询:
- 监狱长
- 用户名资料
def self.find_first_by_auth_conditions(warden_conditions, user)
warden_stuff(warden_conditions).user_stuff(user).first
# or where(warden_conditions).user_stuff(user).first
end
因此,它可以用作user=user。首先通过身份验证条件(the_conditions.dup,a_user)查找[u]
我在通过“Rails学习设备”电子书学习时遇到了完全相同的问题
问题:
singin
实际上是一个未定义的局部变量,即调用的方式
解决方案:
warden_conditions
是包含登录密钥的哈希。使用此哈希而不是局部变量。正确代码如下:
def self.find_first_by_auth_conditions(warden_conditions)
where(["lower(username) = :value OR lower(email) = :value", { :value => warden_conditions[:signin].downcase }]).first
end
注意:
我删除了第一个where
方法,因为signin
不是数据库中的一列。因此,我认为调用第一个where
方法没有意义
我还删除了conditions=warden_conditions.dup
,因为没有必要.dup(复制)warden_条件散列,因为在这种特殊情况下,没有必要担心他的保存问题
但是要小心,如果您通过warden_conditions
散列传递多个参数,那么您需要将第一个参数保留在何处,然后需要复制散列,以便删除signin
键。然后使用备份的登录
键的第二个where
对我来说,这非常有效。在学习“Rails学习设计”电子书时,我遇到了完全相同的问题 问题:
singin
实际上是一个未定义的局部变量,即调用的方式
解决方案:
warden_conditions
是包含登录密钥的哈希。使用此哈希而不是局部变量。正确代码如下:
def self.find_first_by_auth_conditions(warden_conditions)
where(["lower(username) = :value OR lower(email) = :value", { :value => warden_conditions[:signin].downcase }]).first
end
注意:
我删除了第一个where
方法,因为signin
不是数据库中的一列。因此,我认为调用第一个where
方法没有意义
我还删除了conditions=warden_conditions.dup
,因为没有必要.dup(复制)warden_条件散列,因为在这种特殊情况下,没有必要担心他的保存问题
但是要小心,如果您通过warden_conditions
hash传递了不止一个参数,那么您需要保留第一个参数