如何进行发布/重定向/使用Sinatra?

时间:2010-04-28 08:53:10

标签: ruby sinatra

什么是Sinatra相当于Rails'redirect_to方法?我需要按照Post / Redirect / Get流程进行表单提交,同时保留传递给我视图的实例变量。使用redirect方法时,实例变量会丢失。

2 个答案:

答案 0 :(得分:52)

Sinatra中的重定向是最简单易用的。

所以下面的代码可以解释:

require 'rubygems'
require 'sinatra'

get '/' do
  redirect "http://example.com"
end

您也可以像这样重定向到当前应用程序中的另一个路径,但此示例将删除方法。

delete '/delete_post' do
  redirect '/list_posts'
end

使用此重定向指令的一个非常常见的位置是Authentication

def authorize!
  redirect '/login' unless authorized?
end

您可以在以下位置查看更多示例:

Sinatra Manual

FAQ

Extensions

至于你的第二个问题,将变量传递给视图,可能是这样的:

get '/pizza/:id' do
  # makeing lots of pizza
  @foo = Foo.find(params[:id])
  erb '%h1= @foo.name'
end

答案 1 :(得分:6)

Sinatra Book应该清除您的问题。特别是“Redirect”部分。

引自本书:

  

重定向实际上将一个Location标头发送回浏览器,浏览器向所指示的位置发出后续请求。由于浏览器发出了后续请求,因此您可以完全重定向到任何页面,应用程序或其他网站。

     

重定向期间的请求流程为:浏览器 - >服务器(重定向到'/') - >浏览器(请求'/') - >服务器('/'的结果)