0

我试图了解如何使变量可用于未作为参数传递给块的块。

例如,Sinatra 如何使params哈希可用?

get '/hello/:name' do
  howAmIAccessingThis = params[:name]
end

params来自哪里?这个:

get '/hello/:name' do |params|
  @hisName = params[:name]
end

可能是有道理的,因为params它被声明为一个块参数,但这不是它的工作方式。查看源代码,如果没有块参数,我无法找到params哈希是如何传递给块的。

4

2 回答 2

1

如果它不是局部变量或块变量,那么它就是一个方法。我不了解 Sinatra,但必须在params某处定义一个方法。

于 2013-09-10T09:48:27.953 回答
0

使用参数

Sinatra 中的参数和其他所有东西一样——简单明了。

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

get '/hello/:name' do
  "Hello #{params[:name]}!"
end

完成此更改后,您需要重新启动 Sinatra 应用程序。用 Ctrl-C 杀死它并再次运行它。(有一种解决方法,但我们将在以后的文章中讨论。)现在,参数很简单。我们做了一个名为 的动作/hello/:name。这种语法是在模仿 URL 的样子,所以去http://localhost:4567/hello/Your Name看看它的实际效果。

/hello 部分与您发出的请求中的 URL 部分匹配,并且 :name 将吸收您提供的任何其他文本并将其放在键 :name 下的 params 哈希中。参数就是这么简单。当然,您可以使用这些做更多事情,包括基于正则表达式的参数,但这几乎是所有情况下您所需要的。

参考:http ://ruby.about.com/od/sinatra/a/sinatra2.htm

编辑

params 值可以来自 GET 请求的查询字符串,也可以来自 POST 请求的表单数据,但它们还可以来自第三个地方:URL 的路径。

您可能知道,Rails 使用称为路由的东西将请求定向到相应的控制器操作。这些路由可能包含从 URL 中提取并放入 params 的段。例如,如果您有这样的路线:

match 'products/:id', ... 然后对像http://example.com/products/42这样的 URL 的请求会将 params[:id] 设置为 42

因此,只要 URL GET、POST 或 Path 包含此类模式,则 rails 会自动构造 params 哈希。

还要在这里检查参数部分(第 4 部分)

于 2013-09-10T10:19:50.870 回答