1

请原谅这个非常基本的问题,但我不是 Ruby 程序员,我需要了解一行 Ruby 代码:

redirect to('/')

redirect 来自 Sinatra,我理解它的作用,但是“to”是一个很常见的词,以至于我尝试用谷歌搜索这个功能,但我找不到它。导入以下模块:

require 'cgi'
require 'sinatra'
require 'gollum'
require 'mustache/sinatra'
require 'useragent'
require 'stringex'

如果需要,我可以找到整个文件或一些较短的文件。

4

4 回答 4

3

该方法是Sinatra::Helpers#uri,它的别名(也可用)为urlto。它根据给定的参数创建一个绝对 url。

因此,只有 Sinatra 提供的可读方法名称。

于 2012-10-13T18:01:59.617 回答
1

它不是标准的 ruby​​ 函数,它可能是由 sinatra 等框架定义的 DSL 函数。看这里

于 2012-10-13T18:02:27.397 回答
1

您可以在http://www.sinatrarb.com/intro.html找到很多信息

浏览器重定向

您可以使用重定向助手方法触发浏览器重定向:

get '/foo' do
  redirect to('/bar')
end

任何附加参数都像传递给halt的参数一样处理:

redirect to('/bar'), 303
redirect 'http://google.com', 'wrong place, buddy'

您还可以通过重定向返回轻松地重定向回用户来自的页面:

get '/foo' do
  "<a href='/bar'>do something</a>"
end

get '/bar' do
  do_something
  redirect back
end

要通过重定向传递参数,请将它们添加到查询中:

redirect to('/bar?sum=42')

或使用会话:

enable :sessions

get '/foo' do
  session[:secret] = 'foo'
  redirect to('/bar')
end

get '/bar' do
  session[:secret]
end
于 2012-10-13T18:08:13.093 回答
1

ruby 方法是注释中所宣传的alias别名并执行。urito

# lib/sinatra/base.rb
# Generates the absolute URI for a given path in the app.
# Takes Rack routers and reverse proxies into account.
def uri(addr = nil, absolute = true, add_script_name = true)
  return addr if addr =~ /\A[A-z][A-z0-9\+\.\-]*:/
  uri = [host = ""]
  if absolute
    host << "http#{'s' if request.secure?}://"
    if request.forwarded? or request.port != (request.secure? ? 443 : 80)
      host << request.host_with_port
    else
      host << request.host
    end
  end
  uri << request.script_name.to_s if add_script_name
  uri << (addr ? addr : request.path_info).to_s
  File.join uri
end

alias url uri
alias to uri
于 2012-10-13T18:08:17.073 回答