2

これが私のフォームです:

<form action="/results" method="post" name="checkbox_form">
    <input type="checkbox" name="item" value="Bacon">Bacon (1 lb., sliced)<br>
    <input type="checkbox" name="item" value="Eggs (dozen)">Eggs (1 dozen)
    <input type="submit" value="Calculate">
</form>

ユーザーが「ベーコン」と「卵 (1 ダース)」の両方のボックスをチェックした場合、Sinatra や Sequel を使用してこの配列を返す方法は次のとおりです。

["Bacon","Eggs (dozen)"]

ご覧のとおり、配列要素はフォームの「値」要素です。

副次的な質問: Sinatra はチェックボックス フォームをどのように扱いますか? Sinatra のマニュアルには良い情報が見つかりませんでした。

4

1 に答える 1

8

リクエストからアイテムを受け取るのにSequel は実際には必要ありません。postSequel はデータベースなので、返されたアイテムを から受け取った後、データベースに保存しますpost。したがって、この場合、配列を返すために実際には必要ありません。

また、フォームとチェックボックスは Sinatra 固有のものではなく HTML 固有のものです。

フォームをpostリクエストとして送信すると、サーバーと Sinatra に送り返され、そこで処理されます。Sinatra は、params送信されたフォームの値のハッシュを含むメソッドを提供します。

以下の例では、特殊な構文 ( ) を使用して、params ハッシュ内の配列としてitem[]指定された値を提供しています。itemたとえば、これは{"item"=>["Bacon", "Eggs (dozen)"]}両方のチェックボックスがオンになっている params ハッシュが返すものです。

require 'sinatra'

get '/results' do
  erb :results
end
post '/results' do
   params[:item].inspect
end

__END__

@@ results
<form action="/results" method="post" name="checkbox_form">
    <input type="checkbox" name="item[]" value="Bacon">Bacon (1 lb., sliced)<br/>
    <input type="checkbox" name="item[]" value="Eggs (dozen)">Eggs (1 dozen)<br/>
    <input type="submit" value="Calculate"/>
</form>

このgetブロックは、ユーザーのブラウザーから get 要求を受け取り、それを処理します。この例では、HTML フォームをユーザーに返します。

ユーザーがフォームを送信した後、postブロックはユーザーのブラウザから投稿リクエストを受け取ります。ユーザーには、サーバーからの応答が表示されます。この場合は、チェックボックス値の配列です。

于 2012-09-29T04:32:50.543 に答える