为什么Digest :: SHA1阻止了模型的正确注释?

时间:2014-06-04 18:39:04

标签: ruby-on-rails-4 sha1 railstutorial.org ruby-2.0 annotate

我在我的应用中使用annotate并且所有模型都成功注释,但user.rb除外,当我注释时显示以下错误:

  

无法注释user.rb:参数数量错误(0表示1)

除了注释之外,其他一切都很好。用户创建,更新,删除,登录,注销,一切正常。我已经确定问题出在Digest :: SHA1上,我用它来创建会话令牌,如下面在user.rb的片段中所示。

def User.new_remember_token
  SecureRandom.urlsafe_base64
end

def User.hash(token)
  Digest::SHA1.hexdigest(token.to_s)
end

private

  def create_remember_token
    remember_token = User.hash(User.new_remember_token)
  end

如果我删除了第二个(def User.hash(令牌))而是执行以下操作:

def User.new_remember_token
  SecureRandom.urlsafe_base64
end

private
  def create_remember_token
    remember_token = Digest::SHA1.hexdigest(User.new_remember_token.to_s)
  end

然后annotate很高兴并成功注释user.rb.但是,这不是真正的红宝石方式,因为我的会话助手多次使用User.hash(令牌)调用。我不了解Digest :: SHA1.hexdigest或我使用它的方式是什么?

1 个答案:

答案 0 :(得分:0)

您似乎正在通过The Rails Tutorial工作。

您查看User.hash方法问题的可能原因与Digest::SHA1无关,但是因为该方法本身无意中覆盖了Ruby Object#hash方法,它给你一些神秘的错误。 Link to Github issue about it

因此,与this commit to the Sample App repository一样,将User.hash的所有实例重命名为User.digest,希望这样可以解决您的错误。