【问题标题】:undefined method `bytesize' for {"COUNT(*)"=>0}:Hash{"COUNT(*)"=>0}:Hash 的未定义方法 `bytesize'
【发布时间】:2017-09-04 02:53:13
【问题描述】:

当客户端没有被禁止时,会显示一个错误,即: {"COUNT(*)"=>0}:Hash

的未定义方法 `bytesize'

我使用 mysql2 库

post '/mario/login' do
  credentials = CGI.parse request.body.read

  if !credentials.has_key?('username') || !credentials.has_key?('password')
    status 603
    return "MISSING_FIELD"
  end

  results = bans.execute request.ip
  results.each do |row|

    if row['COUNT(*)'] > 0
      status 603
      return "BANNED"
    end

    puts "ok"



  end
end

【问题讨论】:

  • 您的代码试图在函数结束后返回哈希值results。以正确的响应代码/类型返回,它应该可以工作。
  • 我真的很困惑 CGI 在这里做什么。 Sinatra 应该为您解码这些论点。
  • @kiddorails:啊,确实。
  • @tadman 这是请求负载(用户名=root&password=azerty)
  • @ken 请求负载应该可以被 sinatra 在params 哈希中自动破译。参考-sinatrarb.com/intro.html并搜索“查询参数”

标签: mysql ruby sinatra


【解决方案1】:

您的代码试图在函数结束后返回哈希results。返回正确的响应代码/类型,它应该可以工作。

Ruby 中的最后一行/块在任何函数中都会返回。在您的情况下,最后一个块是 results.each,它返回 results,这不是 sinatra 的有效响应类型。

【讨论】:

    猜你喜欢
    • 2010-11-10
    • 2014-03-15
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2011-08-24
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多