Я пытаюсь создать подстановочную карту домена для Rails на основе this railscast. Но я бы хотел сделать так же хорошо, как функция «scope» в собственной маршрутизации, например.Rails routing domain wildcard
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
И я могу получить только HARDCODED параметр «CITY_ID» в контроллере