如何在rails中命名路由

我有一些看起来像这样的路线:

match 'hotels/:action(/:id)', :controller => 'hotel', :action => /[az]+/i, :id => /[0-9]+/i 

我想在我的代码中的某个地方使用类似于hotels_dislike_path的内容 ,这些内容引用/ hotels / dislike

我怎样才能做到这一点?

从路线指南 :

3.6命名路由

您可以使用:as选项为任何路径指定名称。

 match 'exit' => 'sessions#destroy', :as => :logout 

所以,在你的情况下,那将是:

 match 'hotels/:action(/:id)', :controller => 'hotel', :action => /[az]+/i, :id => /[0-9]+/i match 'hotels/dislike(/:id)', :controller => 'hotel', :id => /[0-9]+/i, :as => :hotels_dislike match 'hotels/like(/:id)', :controller => 'hotel', :id => /[0-9]+/i, :as => :hotels_like 

我认为没有办法动态地执行此操作(因此,您必须为每个操作定义一个路由,基本上)。 但是,您可以为最常用的操作定义几个路由(如上所述),只需使用hotels_path :action => :really_like进行更多不常见的操作。

自2011年以来,Rails世界发生了很多变化 – 这就是你在Rails 4中实现相同目标的方式。

 resources :hotels do member do post 'dislike' post 'like' end end 

结果路线:

  dislike_hotel POST /hotels/:id/dislike(.:format) hotels#dislike like_hotel POST /hotels/:id/like(.:format) hotels#like hotels GET /hotels(.:format) hotels#index POST /hotels(.:format) hotels#create new_hotel GET /hotels/new(.:format) hotels#new edit_hotel GET /hotels/:id/edit(.:format) hotels#edit hotel GET /hotels/:id(.:format) hotels#show PATCH /hotels/:id(.:format) hotels#update PUT /hotels/:id(.:format) hotels#update DELETE /hotels/:id(.:format) hotels#destro 

请注意,这是一个rails前缀,而不是dislike_hotel_path the action – dislike_hotel_path而不是hotels_dislike