rails成员路线

Jef*_*rey 4 routes ruby-on-rails

我正在创建一个应该有类似URL的路径http://mysite/cars/1/similar/,这样可以使所有汽车都与具有指定ID的汽车类似(在这种情况下为1)

我已经看到你可以使用语法在routes.rb文件中创建rails成员路由

resources :cars do
  member do
    get :similar
  end
end
Run Code Online (Sandbox Code Playgroud)

我也可以这样做

match 'cars/:id/similar' => 'cars#similar', :via => "get
Run Code Online (Sandbox Code Playgroud)

这两种语法有什么区别

mea*_*gar 8

这两种方法并不相同.

第一种方法产生一个similar_car辅助方法.第二种方法没有.

如果您打算执行类似的操作,辅助方法很重要

= link_to "Similar", similar_car_path(@car)
Run Code Online (Sandbox Code Playgroud)

为了使它们等效,您必须提供一个:as选项:

get "cars/:id/similar" => "cars#similar", :as => "similar_car"
Run Code Online (Sandbox Code Playgroud)


Dav*_*ton 7

一个在默认资源路由声明中统一,IMO更容易找到.另一个不是,这可能会导致错别字等.这不是一个问题,但对于RESTful操作,我宁愿使用资源机制.

您也可以使用单行版本,我更喜欢单行版本:

resources :cars do
  get :similar, :on => :member
end
Run Code Online (Sandbox Code Playgroud)

Meagar是正确的,我忘了匹配表格不会创建帮助方法.