为什么Rails歧视我的路线?

时间:2012-03-12 03:30:41

标签: ruby-on-rails ruby routes rake

在我的routes.rb文件中只有两行:

match 'movies/orderby/:field' => 'movies#orderby'

resources :movies

然而,当我在我的项目上运行rake routes时,我得到一个有趣的输出,看看:

              /movies/orderby/:field(.:format) {:controller=>"movies", :action=>"orderby"}
movies     GET    /movies(.:format)                {:action=>"index", :controller=>"movies"}
           POST   /movies(.:format)                {:action=>"create",:controller=>"movies"}
new_movie  GET    /movies/new(.:format)            {:action=>"new", :controller=>"movies"}
edit_movie GET    /movies/:id/edit(.:format)       {:action=>"edit", :controller=>"movies"}
 movie     GET    /movies/:id(.:format)            {:action=>"show", :controller=>"movies"}
           PUT    /movies/:id(.:format)            {:action=>"update",:controller=>"movies"}
           DELETE /movies/:id(.:format)            {:action=>"destroy", :controller=>"movies"}

您看到我手工编码的路线与其他路线有何不同? (它是顶部的那个)另外,Rails 还没有为我创建了一个url帮助器....

我一直收到以下错误消息:

未定义方法`movies_orderby'

......任何想法????

编辑路线有效(即如果我输入匹配的网址,它会正确路由)但我有没有网址帮助方法提出我的意见!!

1 个答案:

答案 0 :(得分:2)

定义路由时,方法match不会生成url助手,除非您指定助手的名称应该是什么。所以我建议您将其定义如下:

match 'movies/orderby/:field' => 'movies#orderby', :as => :movies_orderby
resources :movies

当您使用:as定义路线名称时,如果您希望按title

排序,则可以在此类视图中使用该名称
<%= movies_orderby_path("title") %>

作为旁注,您已在资源路线之前正确定义了匹配路线。反过来可能会导致问题。