web-dev-qa-db-ja.com

Sinatraを使用してPost / Redirect / Getを行う方法

SinatraのRailsのredirect_toメソッドに相当するものは何ですか?ビューに渡されるインスタンス変数を保持しながら、フォーム送信のPost/Redirect/Getフローに従う必要があります。 redirectメソッドを使用すると、インスタンス変数が失われます。

27
John Topley

シナトラでのリダイレクトは最も簡単に使用できます。

以下のコードで説明できます:

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

以下のサンプルをもっと見ることができます:

シナトラマニュアル

[〜#〜]よくある質問[〜#〜]

拡張

2番目の質問については、変数をビューに渡すと、次のようになります。

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

Sinatra Book で質問をクリアできます。特に「 リダイレクト 」の部分。

本から引用:

リダイレクトは実際にはLocationヘッダーをブラウザーに送り返し、ブラウザーは示された場所へのフォローアップ要求を行います。ブラウザがそのフォローアップ要求を行うため、アプリケーション内の任意のページ、または完全に別のサイトにリダイレクトできます。

リダイレクト中のリクエストのフローは、ブラウザー–>サーバー( '/'にリダイレクト)–>ブラウザー(リクエスト '/')–>サーバー( '/'の結果)です。

6
daddz