5

これはうまくいくようです:

ビュー/index.haml:

%form{:method => 'POST' :action => '/'}
  %label{:for => 'name'} Name:
    %input{:type => 'text, :value => @values[:name] || ""}
  %input{:type => 'submit'}

app.rb:

post '/' do
  @values = params
  haml :review
end

ビュー/review.rb

Hello #{params[:name]}!

ただし、投稿データを別の URL の同じビューに送信しようとすると、エラーが発生します。つまり、次のようになります。

app.rb:

post '/' do
  @values = params
  redirect '/review'
end

get '/review' do
  @values = params
  haml :review
end

データは通過しませんが、エラーは発生しません。

このようなページ間で投稿データを送信するにはどうすればよいですか? 理想的には、データベースを作成したくありません。

4

1 に答える 1

7

パラメータをセッションに保存するか、クエリ文字列を明示的に指定できます。Sinatra ドキュメントからのブラウザ リダイレクト

ドキュメントで指定されているように、セッションを使用するか、POST パラメータをクエリ文字列に変換してredirectメソッドで使用できます。大まかな例は次のとおりです。

'/'ブロック内の POST params ハッシュが次のようになっているとします。

{
  :name => "Whatever",
  :address => "Wherever"
}

このハッシュは、次のように文字列にすることができます。

query = params.map{|key, value| "#{key}=#{value}"}.join("&")
# The "query" string now is: "name=Whatever&address=Wherever"

これを内部で使用しますpost '/' do

redirect to("/review?#{query}")
于 2012-09-26T03:57:40.340 に答える