【问题标题】:Creating a Custom Rails Route创建自定义 Rails 路线
【发布时间】:2010-01-13 20:22:30
【问题描述】:

我正在尝试在 Rails 中创建自定义路线,但不确定我是否以正确的方式进行。首先,我有一个 RESTful 资源,用于重定向到 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&quiz=quizon

这是我的一个链接的样子:

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

感谢任何帮助,我对自定义路线很陌生!

【问题讨论】:

    标签: ruby-on-rails rest routing


    【解决方案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)
    

    如果您不确定定义了哪些路由或如何调用它们,请务必仔细检查“rake routes”的输出。您还可以使用 assert_routing 方法为路由编写功能测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多