Как предлагается в вопросе Маршрутизация Rails для обработки нескольких доменов в одном приложении , я думаю, вы могли бы использовать Маршрутизация Rails - Расширенные ограничения для создания того, что вам нужно.
Если у вас ограниченное пространство контроллеров (с неограниченным количеством просмотров, указывающих на них), это должно работать. Просто создайте ограничение для каждого контроллера, которое проверяет, соответствует ли им текущее представление.
Предполагая, что у вас есть пространство из 2 контроллеров (PostController и CommentController), вы можете добавить в ваш route.rb следующее:
match "*path" => "post#show", :constraints => PostConstraint.new
match "*path" => "comment#show", :constraints => CommentConstraint.new
Затем создайте lib / post_constraint.rb:
class PostConstraint
def matches?(request)
'post' == Rails.cache.fetch("/view_controller_map/#{request.params[:view_name]}") { View.find_by_name(request.params[:view_name]).controller }
end
end
Наконец, создайте lib / comment_constraint.rb:
class CommentConstraint
def matches?(request)
'comment' == Rails.cache.fetch("/view_controller_map/#{request.params[:view_name]}") { View.find_by_name(request.params[:view_name]).controller }
end
end
Вы можете внести некоторые улучшения, например, определить класс супер-ограничений, который выбирает кэш, чтобы вам не приходилось повторять код и не рисковать, выбирая неправильное имя ключа кэша в одном из ограничений.