Ruby用Sinatra给出了“ NoMethodError:nil:NilClass的未定义方法'[]'”

阿塔努

我是Ruby和Sinatra的新手,我正在尝试学习它们。

这就是我的ruby代码(文件:ruby_test2.rb)

#!/usr/bin/ruby
require 'rubygems'

class LearnRuby

  def initalize
    @listen = Hash.new { |hash, key| hash[key] = []; }
  end

  def fill_listen(uid, mid)
    @listen[uid]<<=mid
    "In fill_listen #{@listen}\n"
  end

end

这是我的Sinatra代码(文件:sinatra_test2.rb)

require 'sinatra'
require './ruby_test2'

if __FILE__ == $0
  lr = LearnRuby.new
end

post '/listen' do
  lr.fill_listen params[:uid] , params[:mid]
end

这就是我的运行方式。

ruby sinatra_test2.rb <-启动服务器

curl --data "uid=u1&mid=m312" http://localhost:4567/listen <-用于发布请求的卷曲命令

当我执行以上操作时,我收到此错误(在服务器和客户端(卷曲)端)

localhost - - [22/Mar/2014:22:54:19 IST] "POST /listen HTTP/1.1" 500 3770
- -> /listen
NoMethodError - undefined method `[]' for nil:NilClass:
    <path>/ruby_test2.rb:11:in `fill_listen'
    sinatra_test2.rb:9:in `block in <main>'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:1593:in `call'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:1593:in `block in compile!'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:957:in `[]'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:957:in `block (3 levels) in route!'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:976:in `route_eval'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:957:in `block (2 levels) in route!'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:997:in `block in process_route'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:995:in `catch'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:995:in `process_route'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:955:in `block in route!'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:954:in `each'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:954:in `route!'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:1067:in `block in dispatch!'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:1049:in `block in invoke'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:1049:in `catch'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:1049:in `invoke'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:1064:in `dispatch!'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:889:in `block in call!'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:1049:in `block in invoke'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:1049:in `catch'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:1049:in `invoke'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:889:in `call!'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:877:in `call'
    /var/lib/gems/1.9.1/gems/rack-protection-1.5.2/lib/rack/protection/xss_header.rb:18:in `call'
    /var/lib/gems/1.9.1/gems/rack-protection-1.5.2/lib/rack/protection/path_traversal.rb:16:in `call'
    /var/lib/gems/1.9.1/gems/rack-protection-1.5.2/lib/rack/protection/json_csrf.rb:18:in `call'
    /var/lib/gems/1.9.1/gems/rack-protection-1.5.2/lib/rack/protection/base.rb:50:in `call'
    /var/lib/gems/1.9.1/gems/rack-protection-1.5.2/lib/rack/protection/base.rb:50:in `call'
    /var/lib/gems/1.9.1/gems/rack-protection-1.5.2/lib/rack/protection/frame_options.rb:31:in `call'
    /var/lib/gems/1.9.1/gems/rack-1.5.2/lib/rack/logger.rb:15:in `call'
    /var/lib/gems/1.9.1/gems/rack-1.5.2/lib/rack/commonlogger.rb:33:in `call'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:217:in `call'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:210:in `call'
    /var/lib/gems/1.9.1/gems/rack-1.5.2/lib/rack/head.rb:11:in `call'
    /var/lib/gems/1.9.1/gems/rack-1.5.2/lib/rack/methodoverride.rb:21:in `call'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/show_exceptions.rb:21:in `call'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:180:in `call'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:2004:in `call'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:1469:in `block in call'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:1778:in `synchronize'
    /var/lib/gems/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:1469:in `call'
    /var/lib/gems/1.9.1/gems/rack-1.5.2/lib/rack/handler/webrick.rb:60:in `service'
    /usr/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
    /usr/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
    /usr/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
localhost - - [22/Mar/2014:22:54:51 IST] "POST /listen HTTP/1.1" 500 3770

我可能错过了一些小东西,但由于我刚刚开始学习这些技术,因此需要帮助。

提前致谢。

鲁斯塔姆·加萨诺夫(Rustam A.Gasanov)

这是为您工作的示例,@listenwas nil,因为您拼写错误initalize->initialize

require 'sinatra'

class LearnRuby
  def initialize
    @listen = {}
  end

  def fill_listen(uid, mid)
    @listen[uid] = mid
    "In fill_listen #{ @listen }\n"
  end
end

post '/listen' do
  lr = LearnRuby.new
  lr.fill_listen(params[:uid], params[:mid])
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

所有的Ruby测试都提高了:nil:NilClass的未定义方法“ authenticate”

nil:NilClass的未定义方法“ +”-Ruby

brew cask卸载--force虚拟框给出了错误:nil:NilClass的未定义方法'<='

Ruby Before-Loop:nil:NilClass的未定义方法“ []”(NoMethodError)

nil:NilClass Ruby on Rails的未定义方法'>'(NoMethodError)

Ruby Heapsort:“接收器”:nil:NilClass的未定义方法“>”

NoMethodError(nil:NilClass的未定义方法“ []”):即使在使用dig时,Ruby on Rails

Ruby:nil:NilClass的未定义方法`[] ='

nil:NilClass <NoMethodError>的未定义方法'[]'

Ruby:文本日志文件-nil:NilClass的未定义方法“ []”(NoMethodError)

在方法调用之前,nil:NilClass(NoMethodError)的Ruby未定义方法“ []”

Ruby的nil:NilClass未定义方法`user'

使用Ruby获取方法错误“ NoMethodError:nil:NilClass的未定义方法'each'”

Ruby的nil:NilClass未定义方法`+'

nil:NilClass的未定义方法`each'-Ruby on Rails

nil:NilClass的未定义方法“错误”-Ruby on Rails

Ruby错误:nil:NilClass的未定义方法“名称”

Ruby on Rails-未定义的方法“是否持续?” 对于nil:NilClass

未定义的方法“ +”,用于nil:NilClass(NoMethodError)-Ruby

ruby / sql语法nil:NilClass的未定义方法“查询”(NoMethodError)

Ruby on Rails-nil:NilClass的未定义方法“错误”

NoMethodError:nil:NilClass的未定义方法“ +”

ruby - NoMethodError:未定义的方法“状态”

学习 Ruby on Rails:NoMethodError(未定义方法 `[]' for nil:NilClass):

Ruby on Rails - nil:NilClass 错误的未定义方法`each'

Ruby `add_item':未定义方法 `>' 为 nil:NilClass (NoMethodError)

Ruby on Rails 5.2 - NoMethodError(nil:NilClass 的未定义方法`host'):

发生 Ruby 异常:未定义方法 `split' for nil:NilClass

Ruby 方法返回为“未定义的方法‘include?’ 对于 nil:NilClass (NoMethodError)"