Внутренние ограничения перезаписывают внешние ограничения.
В связи с этим существует несколько проблем с github, например, https://github.com/rails/rails/pull/19075#issuecomment-92028613
Так что ваш constraints: ->(request) { request.format.html? }
"отключает"constraints subdomain: 'admin'
Таким образом, все запросы направляются непосредственно к первому get '*path', to: 'home#show'
, который соответствует.
Вы можете легко проверить это, просто изменив порядок обоих, и вы всегда окажетесь в App::HomeController#show
.
Если вы удаляете constraints: ->(request) { request.format.html? }
, тогда запрос заканчивается в правильном контроллере, но затем теряет принудительный HTML.Для обоих ограничений вы можете попробовать что-то в этом роде.Используйте модули ограничений, как описано здесь .
module CustomAdminConstraint
def self.matches? request
request.subdomain.present? && request.subdomain == 'admin' && request.format.html?
# possible short form
# request.subdomain&.== 'admin' && request.format.html?
end
end
module CustomAppConstraint
def self.matches? request
request.subdomain.present? && request.subdomain == 'app' && request.format.html?
end
end
# routes.rb
constraints CustomAdminConstraint do
namespace :admin, path: nil do
get '*path', to: 'home#show'
end
end
constraints CustomAppConstraintdo
namespace :app, path: nil do
get '*path', to: 'home#show'
end
end
Но имейте в виду, что в будущем другие форматы сложнее реализовать.Фу ... какая поездка