Я хотел бы смочь отобразить URL на Контроллеры динамично на основе информации в моей базе данных.
Я надеюсь делать что-то функционально эквивалентное этому (принимающий a View
модель):
map.route '/:view_name',
:controller => lambda { View.find_by_name(params[:view_name]).controller }
Другие предложили динамично восстановить маршруты, но это не будет работать на меня, поскольку могут быть тысячи Представлений, которые отображаются на тот же Контроллер
Итак, я думаю, вы спрашиваете, если у вас есть таблица представлений и модель представления для нее, где таблица выглядит как
id | name | model
===================
1 | aaa | Post
2 | bbb | Post
3 | ccc | Comment
Вам нужен URL-адрес of / aaa, чтобы указать на Post.controller - это правильно?
Если нет, то то, что вы предлагаете, кажется прекрасным, если предположить, что это работает.
Вы можете отправить его в действие catch all и заставить действие посмотреть URL-адрес, запустить find_by_name и затем оттуда вызвать правильный контроллер.
def catch_all
View.find_by_name('aaa').controller.action
end
Вы можете использовать redirect_to и даже отправлять параметры. В приведенном ниже примере я отправляю параметры поиска
def catch_all
new_controller = View.find_by_name('aaa').controller
redirect_to :controller => new_controller, :action => :index,
:search => params[:search]
end