11

特定の制約を満たすすべてのリクエストを特定のコントローラーに送信したいと考えています。だから私はキャッチオールルートが必要です。Railsでそれを指定するにはどうすればよいですか? このようなものですか?

match '*', to: 'subdomain_controller#show', constraints: {subdomain: /.+\.users/}

それは本当にすべての可能なルートをキャッチしますか? ネストされたディレクトリが多数ある場合でも、すり抜けないことが重要です。

Ruby on Rails 3.2 を使用していますが、4.0 にアップグレードする準備ができています。

更新:'*path'動作するようです。ただし、私が実行している問題は、ファイルがpublicディレクトリに存在するたびに、Rails が代わりにそれをレンダリングすることです。

4

2 に答える 2

18

このアプローチには微調整が必​​要だと思いますが、要点はわかります。

アップデート:

#RAILS 3
#make this your last route.
match '*unmatched_route', :to => 'application#raise_not_found!'

#RAILS 4, needs a different syntax in the routes.rb. It does not accept Match anymore.
#make this your last route.
get '*unmatched_route', :to => 'application#raise_not_found!'

class ApplicationController < ActionController::Base

...
#called by last route matching unmatched routes.  
#Raises RoutingError which will be rescued from in the same way as other exceptions.
def raise_not_found!
    raise ActionController::RoutingError.new("No route matches #{params[:unmatched_route]}")
end
...

end

詳細はこちら: https://gist.github.com/Sujimichi/2349565

于 2013-10-14T21:10:37.560 に答える
0

これはうまくいくはずです

Calamas::Application.routes.draw do
  get '*path', to: 'subdomain_controller#show',constraints: lambda { |request| request.path =~ /.+\.users/ }
end
于 2013-10-14T20:39:36.657 に答える