Sinatra如何传递params
哈希
get '/hello/:name' do
@howAmIAccessingThisParamsHashIfItIsNotBlockParameter = params[:name]
end
这个params
哈希来自哪里?这样:
get '/hello/:name' do |params|
@hisName = params[:name]
end
是有意义的,因为params是在块参数中声明的,但是查看源代码我无法找到params
哈希如何在没有块参数的情况下传递给块。
注意:这个问题不是关于如何使用Sinatra等。我问的是sinatra如何通过params hash,因为我可以看到它被声明在任何地方。
答案 0 :(得分:0)
如果它不是局部变量或块变量,那么它就是一种方法。我不知道Sinatra,但必须在某处定义params
方法。
答案 1 :(得分:0)
使用参数
Sinatra中的参数就像其他一切一样 - 简单明了。
#!/usr/bin/env ruby
require 'rubygems'
require 'sinatra'
get '/hello/:name' do
"Hello #{params[:name]}!"
end
完成此更改后,您需要重新启动Sinatra应用程序。用Ctrl-C杀死它并再次运行它。 (有一种解决方法,但我们将在以后的文章中看一下。)现在,参数很简单。我们做了一个名为/hello/:name
的动作。此语法模仿了网址的外观,因此请转到http://localhost:4567/hello/Your Name
查看网址。
/ hello部分匹配您所做请求的URL部分,并且:name将吸收您提供的任何其他文本,并将其放在key:name下的params哈希中。参数就这么简单。当然,你可以做更多的事情,包括基于正则表达式的参数,但几乎在所有情况下你都需要这些。
参考:http://ruby.about.com/od/sinatra/a/sinatra2.htm
修改强>
params值可以来自GET请求的查询字符串,也可以来自POST请求的表单数据,但它们也可以来自第三位:URL的路径。
您可能知道,Rails使用称为路由的东西将请求定向到相应的控制器操作。这些路由可能包含从URL中提取并放入参数的段。例如,如果您有这样的路线:
匹配'products /:id',... 然后,对http://example.com/products/42之类的网址的请求会将参数[:id]设置为42
因此,只要URL GET,POST或Path包含这样的模式,那么params hash就会被rails自动构建。
同时检查参数部分(第4节)here