2つのルートを使用する2番目のオプションは、サポートするURLの種類にのみ一致するため、ほぼ確実に適しています。最初のオプションは、/ document / foo/barなどのURLにも「一致」します。これにより、#common_queryメソッドがせいぜいRecordNotFound(404)応答を返す可能性があります。最悪の場合、予想されるパラメータを表示する準備ができていない場合は、代わりに500エラーが発生します...
もちろん、バリエーションがたくさんあると、ルートもたくさんなってしまいます。また、/ document / batch / 4 / tag / happyなど、これらを組み合わせて使用する必要がある場合は、ワイルドカードルートを使用し、コントローラーでパラメーター処理を行う必要があります。これは次のようになります。
map.connect 'documents/*specs', :controller => "documents_controller", :action => "common_query"
URLのさまざまな要素は、コントローラーでparams [:specs]として使用できます。あなたはそれをそのような発見に変えるかもしれません:
@items = Item.find(:all, :conditions => Hash[params[:specs]])
このHash[]手法は、オプションの1次元配列をキー値ハッシュに変換します。これは、find()に直接フィードしない場合でも役立つ可能性があります。