【发布时间】:2013-01-20 20:57:22
【问题描述】:
在我的应用程序中,我有以下两条路线
get '/' do
...
haml :home
end
和
get '/:id' do
@variable = Something.get(params[:id])
somethingelse = @variable.some_method
...
haml :show
end
如果我使用shotgun 执行我的应用程序并访问 localhost:9393(shotgun 的默认地址和端口),一切正常,即日志中不显示错误消息
如果我使用通常的ruby app.rb 运行服务器(也安装了瘦)并访问 localhost:4567,那么它会抱怨 NilClass 没有方法“some_method”......好像第二条路线后面跟着空字符串id。
在 Sinatra 文档中,据说路由是按顺序调用的,因此它甚至不应该遇到第二个。我错了吗?
作为测试,我把第二条路由改成'/:id/show',就没有报错了。
在这两种情况下(我的意思是使用霰弹枪和普通服务器)网站都完美呈现,即在/ 中,视图正确地是 home.haml 而不是 show.haml。所以错误只存在于日志文件中。说实话,@variable.some_method 是直接在视图中调用的,而在浏览/ 时,我收到了来自/show.haml 的错误。
做什么?为了不再遇到此错误,我应该做些什么吗?我应该明目张胆地忽略它吗?
编辑:代码的输出和相关部分可以在这里找到:https://gist.github.com/4585374
【问题讨论】:
-
我不认为这取决于您提供的信息中 Sinatra 的路线选择。如果您添加进一步的日志记录,甚至在每个路由和每个视图中添加
warn,这将对您有所帮助,这样您就可以看到什么时候被调用。顺便说一句,您的第二条路线的代码中有错字。 -
我添加了我在原始问题中得到的输出。感谢您的错字,它只是在这里,而不是在实际代码中。