【问题标题】:Why is Digest::SHA1 preventing proper annotation of a model?为什么 Digest::SHA1 会阻止模型的正确注释?
【发布时间】:2014-06-04 18:39:03
【问题描述】:

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

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

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

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(token)) 并改为执行以下操作:

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(token) 调用。我对 Digest::SHA1.hexdigest 或我使用它的方式有什么不了解的地方?

【问题讨论】:

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


    【解决方案1】:

    看起来你正在处理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,希望这样可以解决您的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      相关资源
      最近更新 更多