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

Joh*_*ley 26 ruby sinatra

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

inc*_*ude 54

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

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

require 'rubygems'
require 'sinatra'

get '/' do
  redirect "http://example.com"
end
Run Code Online (Sandbox Code Playgroud)

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

delete '/delete_post' do
  redirect '/list_posts'
end
Run Code Online (Sandbox Code Playgroud)

使用此重定向指令的一个非常常见的位置是"身份验证"

def authorize!
  redirect '/login' unless authorized?
end
Run Code Online (Sandbox Code Playgroud)

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

Sinatra手册

常问问题

扩展

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

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

  • 这不回答我的问题.我想在处理程序中重定向并保留实例变量,就像在Rails中一样. (3认同)

sca*_*ble 6

西纳特拉书应该清楚你的问题.特别是" 重定向 "部分.

引自本书:

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

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

  • sinatra图书链接不再可用。 (2认同)