2013-04-02 20 views
10

私はのようになりますシナトラといくつかの方法を行う必要があります。シナトラと疑問符

ます。http:// localhostを:?1234 /追加は

をstring_to_addしかし、私はこのようにそれを宣言するとき:

get "/add?:string_to_add" do 
... 
end 

string_to_add paramが表示されません。

私のメソッドを宣言し、このパラメータを使用して動作させる方法を教えてください。

+0

あなたはこれを見ましたか?http://stackoverflow.com/questions/529065/how-to-use-params-with-slashes-with-sinatra? – Shmidt

+0

このソリューションは私が必要なときには機能しません '?' '/'の代わりにbefor '*' – earsonheart

答えて

17

、疑問符がquery部分からpath一部を分離します。クエリ部分は、通常、名前と値のペアで構成され、ユーザーがフォームに入力したデータと一致させるために、Webブラウザによって構築されることがよくあります。例えば、URLは次のようになります。

http://example.com/submit?name=John&age=93 

ここ/submitのパスセクション、およびクエリのセクションはageためnameキー、および「93」の値が「ジョン」を指しているname=John&age=93です。

Sinatraにcreate a routeと入力すると、パス部分のみが指定されます。 Sinatraはクエリを解析し、その中のデータをparamsオブジェクトで利用可能にします。この例では、このような何かを行うことができ:シナトラルートを定義するときに?文字を使用する場合は

get '/submit' do 
    name = params[:name] 
    age = params[:age] 
    # use name and age variables 
    ... 
end 

が、それはオプションのURLの一部になります。 (get "/add?:string_to_add")を使用した例では、実際には/adで始まるURLに一致し、別の場合はdとなり、それ以外のものはparamsハッシュの:string_to_addキーに入れられ、クエリセクションは個別に解析されます。言い換えれば、疑問符は先行するd文字を任意にします。

Sinatraでクエリ文字列の「生の」テキストを取得する場合は、query_string method of the request objectを使用できます。ルートは?文字、ちょうどベース/addが含まれていないことを

get '/add' do 
    string_to_add = request.query_string 
    ... 
end 

注:あなたの例では、このようになりますこと。

0

あなたのようにそれを宣言する必要がありますURLで

get "/add?:string_to_add?" do 
... 
end