Что я пытаюсь сделать:
Я строю систему, в которой есть разные типы постов. Если оставить в стороне модели, этот вопрос о маршрутах и контроллере
В основном /posts/new
должен идти на какую-то страницу индекса, в то время как /posts/new/anything
должен искать тип anything
и затем создавать форму для создания новой.
Как я пытаюсь это сделать:
Не стесняйтесь игнорировать этот раздел, так как я могу быть совершенно не на том пути.
В конфиге маршрутов:
map.connect '/posts/new', :controller => 'posts', :action => 'new_index'
map.resources :posts, :path_names => { :new => 'new/:type' }
В контроллере:
class PostsController
# implicit: def new_index ; end
def new
@post = class_for_type(params[:type]).new
end
end
Представление имеет код, который смотрит на тип @post, чтобы определить, какой набор представлений использовать. Оказывается, это дает мне 90% пути: /posts/new/quip
на самом деле отправляет меня на правильную страницу, чтобы создать шутку и так далее. /posts/new
отправляет меня на главную страницу.
Проблема двоякая.
Я все еще хочу использовать такие удобные методы:
<%= link_to 'New Post', new_post_path %>
Но теперь это недопустимо, поскольку new_post_path
требует параметр :type
.
Я хотел бы сделать это, используя один маршрут, если это возможно.