定义自定义命名路由

时间:2013-02-09 09:17:34

标签: ruby-on-rails ruby ruby-on-rails-3

如何定义路线,以获得以下结果:

 new_ad GET    /ads/new/:type(.:format)        ads#new
    ads POST   /ads(.:format)                  ads#create
edit_ad GET    /ads/:id/edit(.:format)         ads#edit
     ad GET    /ads/:id(.:format)              ads#show
        PUT    /ads/:id(.:format)              ads#update
        DELETE /ads/:id(.:format)              ads#destroy

一般来说,我需要在新路径中指定类型参数,并且能够像这样使用路径助手:

new_ad_path("somytype") # -> ads/new/somytype -> ads#new -> params[:type] = "somytype"

3 个答案:

答案 0 :(得分:1)

要传递参数,您可以执行以下操作:

new_ad_path(type: "sometype")

这将导致:

/ads/new?type=sometype

然后在控制器中,您可以检查参数类型并执行所需的操作。

答案 1 :(得分:1)

你的routes.rb

中的

get '/ads/new/:type' => 'ads#new', as: :new_ad

@ mind.blank的解决方案也可以正常使用

答案 2 :(得分:1)

您可以使用以下内容定义这些路线:

resources :ads, except: [:index, :new] do
  get '/ads/new/:type', on: :collection, as: :new_ad
end