2010-01-13 64 views
2

我试图在导轨中创建一个自定义路线,我不知道我是否以正确的方式去做。首先,我有一个REST风格的资源,用于重定向到mystash作为控制器:创建自定义导轨路线

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方法编写路由功能测试。