Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么这个未使用的self.hash方法会导致;can';t将字符串转换为整数";错误?_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 为什么这个未使用的self.hash方法会导致;can';t将字符串转换为整数";错误?

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,无法将字符串转换为整数 有人提出了同样的问题。第一次,询问者说问题在第二天就自行解决了。(我三天前第一次遇

我正在浏览网页。在一个名为access\u controller的控制器中,我们从一个名为AdminUser的模型调用了一个方法。最初的电话是:

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重新加载代码时,它会加载新方法,但不会删除旧方法。您必须手动执行此操作或重新启动服务器。感谢您的响应,我不认为这是问题的原因,因为我已多次重新启动,但我不知道这是有用的信息。您可以发布完整的堆栈跟踪吗?错误跟踪将准确地告诉您哪个文件中的哪一行引发了错误。