Ruby on rails 为什么这个未使用的self.hash方法会导致;can';t将字符串转换为整数";错误?
我正在浏览网页。在一个名为access\u controller的控制器中,我们从一个名为AdminUser的模型调用了一个方法。最初的电话是:Ruby on rails 为什么这个未使用的self.hash方法会导致;can';t将字符串转换为整数";错误?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我正在浏览网页。在一个名为access\u controller的控制器中,我们从一个名为AdminUser的模型调用了一个方法。最初的电话是: authorized_user = AdminUser.authenticate(params[:username], params[:password]) 当我运行rails服务器,打开浏览器并访问适当的视图时,我得到错误:TypeError,无法将字符串转换为整数 有人提出了同样的问题。第一次,询问者说问题在第二天就自行解决了。(我三天前第一次遇
authorized_user = AdminUser.authenticate(params[:username], params[:password])
当我运行rails服务器,打开浏览器并访问适当的视图时,我得到错误:TypeError,无法将字符串转换为整数
有人提出了同样的问题。第一次,询问者说问题在第二天就自行解决了。(我三天前第一次遇到这个问题,所以没有发生。)第二个问题没有得到回答。我将尝试提供更多细节:
模型中的方法是:
def self.authenticate(username="", password="")
user = AdminUser.find_by_username(username)
if user && user.password_match?(password)
return user
else
return false
end
end
当我从rails控制台调用这个方法时,它工作得非常好。关于从控制器调用它,或者试图通过浏览器访问它,似乎出了问题(我是一个相对初学者,所以我很抱歉,我无法更好地表达这个想法)。此后,我在同一AdminUser模型中使用更简单的方法复制了此错误:
def self.nothing
true
end
这仍然给我同样的错误。然后,我尝试从不同的控制器和操作(称为pages_controller#show)调用self.nothing方法。当我试图在浏览器中打开它时,我再次遇到同样的错误:“无法将字符串转换为整数”
然后,我在主题模型中创建了一个相同的self.nothing方法。当我尝试从pages\u控制器中的show操作运行该方法时,它完全可以正常工作。没有错误
所以,同样的方法在rails控制台中运行得非常好,当我把它放在Subject模型中时运行得非常好,但是当我把它放在AdminUser模型中时,会产生一个错误
然后,我尝试注释掉AdminUser模型中的所有内容,看看是否可以消除错误。我终于做到了。该错误显然是由另一种方法引起的:
def self.hash(password="")
Digest::SHA1.hexdigest(password)
end
我本应该在几节视频课前删除此方法,当时我们添加了以下其他方法:
def self.make_salt(username="")
Digest::SHA1.hexdigest("Use #{username} with #{Time.now} to make salt")
end
def self.hash_with_salt(password="", salt="")
Digest::SHA1.hexdigest("Put #{salt} on the #{password}")
end
我从未删除最初的一个,但出于某种原因,它是导致错误的那个
因此,我现在的问题是:为什么留在该方法中(在任何地方都没有使用)会导致“无法将字符串转换为整数”错误?原因是
User.hash
覆盖对象。hash
应该返回Fixnum
。
您应该更改它的名称,例如
User.make_hash
我没有仔细阅读,但要注意,当Ruby重新加载代码时,它会加载新方法,但不会删除旧方法。您必须手动执行此操作或重新启动服务器。感谢您的响应,我不认为这是问题的原因,因为我已多次重新启动,但我不知道这是有用的信息。您可以发布完整的堆栈跟踪吗?错误跟踪将准确地告诉您哪个文件中的哪一行引发了错误。