2010-01-13 8 views
2

Я пытаюсь создать собственный маршрут в рельсах, и не уверен, правильно ли я это сделаю. Во-первых, у меня есть RESTful ресурс для тайников, который перенаправляет mystash в качестве контроллера:Создание настраиваемого маршрута Rails

map.resources :stashes, :as => 'mystash' 
site.com/mystash goes to :controller => 'stashes', :action => 'show' 

Что является то, что я хочу. Теперь он становится несколько запутанным. Я хотел бы иметь возможность добавлять условные параметры к этому маршруту. В конце концов, я хотел бы иметь маршрут, который выглядит следующим образом:

site.com/mystash/zoomout/new/quiz_on/

У меня есть места это в маршрутах:

map.connect 'mystash/:zoom/:nav_option/:quiz', 
      :controller => 'stashes', 
      :action => 'show'  
map.connect 'mystash/:zoom/:nav_option', 
      :controller => 'stashes', 
      :action => 'show' 
map.connect 'mystash/:zoom', 
      :controller => 'stashes', 
      :action => 'show' 
map.connect 'mystash', 
      :controller => 'stashes', 
      :action => 'show' 

Мои маршруты в конечном итоге глядя, как в браузере: site.com//mystash/zoomin?nav_option=New & викторина = quizon

и это то, что один из моих ссылок выглядит следующим образом:

<%= link_to "In", stash_path("zoomin", :nav_option => @nav_option, :quiz => @quiz) %> 

Любая помощь приветствуется, я довольно новичок в настраиваемых маршрутах!

ответ

1

Вы должны указывать на эти маршруты разные имена вместо значения по умолчанию, или вы должны указывать маршрут с помощью хэша, а не вызова X_path. Например:

map.stash_zoom_nav_quiz 'mystash/:zoom/:nav_option/:quiz', 
    :controller => 'stashes', 
    :action => 'show'  
map.stash_zoom_nav 'mystash/:zoom/:nav_option', 
    :controller => 'stashes', 
    :action => 'show' 

Имейте в виду, что при объявлении имени маршрута, параметры в пути должен быть указан в вызове X_path без каких-либо упущений, а не как хэш.

link_to('Foo', stash_zoom_nav_quiz_path(@zoom, @nav_option, @quiz)) 
link_to('Bar', stash_zoom_nav_path(@zoom, @nav_option)) 

Альтернативой является не беспокоить с именованными маршрутами и пусть двигатель фигуру, направляя его на свой собственный:

link_to('Foo', :controller => 'stashes', :action => 'show', :zoom => @zoom, :nav_option => @nav_option, :quiz => @quiz) 

Если вы не уверены, какие маршруты определены, или как их называют , всегда тщательно проверяйте выход «рейк-маршрутов». Вы также можете написать функциональные тесты для маршрутов с помощью метода assert_routing.

Смежные вопросы