この railscastに基づいて、Rails のドメイン ワイルドカード ルーティングを作成しようとしています。しかし、ネイティブルーティングの「スコープ」機能と同じくらいいいものにしたいと思います。
domain ':city_id.mysite.com' do
root :to => "cities#test"
end
私見ですが、正規表現よりもきれいに見えますが、「:city_id.mysite.com」のようなパスのパーサーを自分で書くのが面倒です。レール内のどこかに既に存在していると思いますが、ソースコードで見つけることができません。また、このルートに :constraints、:as、:scope およびその他の構成を使用することもできますが、htis はオプションです。
今のところ、私のコードは次のようになります。
module Domain
class Match
def initialize(wildcard, *options)
@wildcard = wildcard
end
def matches?(request)
request.path_parameters[:city_id] = request.subdomain #to replace this with setting parameters from wildcard, :default and so on
request.subdomain.present? #to replace this string with wildcard-match condition
end
end
module Mapper
def domain(wildcard='')
constraints(Domain::Match.new wildcard) { yield }
end
end
end
ActionDispatch::Routing::Mapper.send(:include, Domain::Mapper)
したがって、サブドメインのみのルートを作成できます
domain 'subdomain' do
root :to => "cities#test"
end
そして、コントローラーでハードコードされたパラメーター「city_id」のみを取得できます