2012-01-31 12 views
4

私はSinatra内から他のルートをトリガーする必要があるので、いくつかのルートの応答をバンドルするルートを作成しています。私はこのコードをSinatra READMEで見つけました。Sinatra内のクエリ文字列で別のルートをトリガー

status, headers, body = call env.merge("PATH_INFO" => '/bar') 

ただし、クエリ文字列は送信しません。だから私はこれを試した:

status, headers, body = call env.merge(
    "PATH_INFO" => '/bar', 
    "QUERY_STRING" => 'param=1' 
) 

それは動作していないようです。別のルートを呼び出して、文字列の値が呼び出されたルートのparamsハッシュに終わるようにクエリ文字列を渡すにはどうすればよいですか。

私たちはSinatra 1.3.1とRack 1.3.5を使用しています。

+1

私の答えの横にあなたのルートロジックを、どちらのルートからでも呼び出せるヘルパーメソッドに入れてみませんか?他のルートからの複数のルートを呼び出すことは、良い設計の決定のようには聞こえません。 – three

+0

アプリケーションの読み込みパフォーマンスを向上させるバックフィル。代わりに、ブラウザからのGETリクエストの束があります。 – Hemlock

+0

いいえ、@ threeのように、パラメタを明示的に渡すヘルパーメソッドにルートの内容を移動し、結果を集計する必要があるときにそれらのメソッドを呼び出すこともできます。 Sinatra 1.3.2には、[バグ](https://github.com/sinatra/sinatra/issues/452)[導入済み](https://github.com/sinatra/sinatra/issues/453)があることにも注意してください。この問題を取り巻く – Phrogz

答えて

3

のようなルートにのparamsを追加することができます。明らかに、Sinatra READMEに表示されていても、これはサポートされていません。時間が許せば私は自分のルートを改造して、これは必須ではないが、あなたはそこにいる。

@original_params = nil 
status, headers, body = call env.merge(
    "PATH_INFO" => '/bar', 
    "QUERY_STRING" => 'param=1' 
) 
0

あなたはとてもソリューションが@original_params変数をクリアすることで、この"/bar?param=1&anotherparam=3"

+0

これは 'not_found'を引き起こします。 – Hemlock

+1

ログには何が表示されますか? 'params' varを出力できますか?多分それをフィルターの前に入れてください。 – three

関連する問題