Как сделать Post / Redirect / Get используя Sinatra? - PullRequest
26 голосов
/ 28 апреля 2010

Что является синатровским эквивалентом метода Rails redirect_to? Мне нужно следовать потоку Post / Redirect / Get для отправки формы, сохраняя переменные экземпляра, которые передаются в мое представление Переменные экземпляра теряются при использовании метода redirect.

Ответы [ 2 ]

53 голосов
/ 28 апреля 2010

Перенаправление в Синатре является наиболее простым в использовании.

Итак, приведенный ниже код может объяснить:

require 'rubygems'
require 'sinatra'

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

Вы также можете перенаправить на другой путь в вашем текущем приложении, как этот, хотя этот пример удалит метод.

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

Очень распространенным местом, где используется эта инструкция перенаправления, является Аутентификация

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

Вы можете увидеть больше образцов в:

Руководство по Синатре

FAQ

Расширения

Что касается вашего второго вопроса, передавая переменные в представления, это возможно так:

get '/pizza/:id' do
  # makeing lots of pizza
  @foo = Foo.find(params[:id])
  erb '%h1= @foo.name'
end
6 голосов
/ 28 апреля 2010

Книга Синатра должна прояснить ваш вопрос. Особенно часть " Redirect ".

Цитируется из книги:

Перенаправление фактически отправляет обратно заголовок Location в браузер, и браузер отправляет запрос на отслеживание указанного местоположения. Поскольку браузер отправляет этот запрос, вы можете полностью перенаправить его на любую страницу в приложении или на другой сайт.

Поток запросов во время перенаправления: Браузер -> Сервер (перенаправление на ’/’) -> Браузер (запрос ’/’) -> Сервер (результат для ’/’)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...