Rails5 APIでは、経路にContraintsを追加することができました。例えば;ブドウにクエリパラメータの制約を適用するにはどうすればよいですか?
GET /hello => hello#index
GET /hello?download => hello#download
ご覧のとおり、両方のURLが同じです。違いは2番目に制約があり、ダウンロードパラメータがURLにある場合は別のアクションにリダイレクトされます。
グレープで同じことをどうすればできますか?私は彼らのドキュメントや問題のリストにリソースを見つけることができませんでした。
get :hello do
'I am a hello world page'
end
が、URLは私がこれを実行したいその後、事前に定義され、いくつかのクエリパラメータがある場合:
get :hello do { ?download }
'download a file (for example)'
end
は私がparams
と遊んだとrequires
のparamsを作成します。 まだ最初の人がリクエストを受け取ります。
これは私がルートのためにRailsのAPIで使用しているものである:
class DownloadConstraint
def matches?(request)
request.query_parameters.key?('download')
end
end
UPDATE:私はこれについて、より明確になりたい。私は両方のルートを一緒に使用したいと思います。私はparamsバッグが実行前にパラメータを要求するのに使用できることを知っています。私が達成しようとしているのは、GETパラメータに基づいてルートを設定したいということです。 Railsの高度なcontraintsを参照してください:それはreceievedた場合http://guides.rubyonrails.org/routing.html#advanced-constraints
感謝を。しかし、これは動作していません。参照:これは必須です:ダウンロードするパラメータを指定してください。しかし、もし私がそのパラメタを書いていけないとすれば?私はそれらを別のアクションにリダイレクトしたい。私はパラメータに基づいてルートを実行したい。私はすでに、私の質問で規制のサンプルを出しています。私は ':hello' **と**と** ** ** ** ** **を個別に使用したいと思います。私がこれを使うと、URLにURLを入れないと、 "ダウンロード"が行方不明になります。こちらをご覧ください:http://guides.rubyonrails.org/routing.html#advanced-constraints – Pratha
申し訳ありませんが、私はあなたの質問に誤解しました。私はオプションのパラメータとリダイレクトでそれを処理します。 – infused
その大丈夫です。私は実際にHTTPリダイレクトをしたくありません。私はちょうど私たちがRailsのようにリクエストに直接応答したいと思います。私はブドウにこのオプションがあると確信していますが、私はどのように知りません。 Railsができれば、ブドウもできます(私は推測します)。あるいは、ユーザーのブラウザやリクエストをリダイレクトせずに、リクエストを別のメソッド/ルートに内部的にリダイレクトする方法があります。 – Pratha