Sinatra风格的Params散列在块内

时间:2013-09-10 09:30:10

标签: ruby sinatra

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,因为我可以看到它被声明在任何地方。

2 个答案:

答案 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