Есть ли способ, которым я могу заставить url_for возвращать url на основе request.host во время маршрутизации отправки действий?
mount Collaborate::Engine => '/apps/collaborate', :constraints => {:host => 'example.com' }
mount Collaborate::Engine => '/apps/worktogether'
Пример:
Когда пользователь находится на хосте example.com
cooperate_path = > /apps/сотрудничать
Когда пользователь находится на любом другом хосте
cooperate_path = > /apps/worktogether
После большого исследования я понял, что класс RouteSet имеет named_routes, который не учитывает ограничения для возврата URL-адреса.
Я попробовал переопределить @set в action_dispatch/routing/route_set.rb для загрузки из приложения rails, но работает как ожидалось
@search_set = Rails.application.routes.set.routes.select{|x| x.defaults[:host] == options[:host] }[0]
@set = @search_set unless @search_set.blank?