4

我正在创建一个应该有类似 url 的路线http://mysite/cars/1/similar/,这将获得所有与具有指定 id 的汽车相似的汽车(在本例中为 1)

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

resources :cars do
  member do
    get :similar
  end
end

我也可以做类似的事情

match 'cars/:id/similar' => 'cars#similar', :via => "get

这两种语法有什么区别

4

2 回答 2

8

这两种方法是不等价的。

第一种方法产生一个similar_car辅助方法。第二种方法不行。

如果您打算执行以下操作,辅助方法很重要

= link_to "Similar", similar_car_path(@car)

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

get "cars/:id/similar" => "cars#similar", :as => "similar_car"
于 2012-08-23T01:53:29.727 回答
7

一种是在默认资源路由声明中统一,IMO 更容易找到。另一个不是,这可能导致拼写错误等。这没什么大不了的但是对于 RESTful 操作,我宁愿使用足智多谋的机制。

您还可以使用单行版本,我更喜欢单行路线:

resources :cars do
  get :similar, :on => :member
end

Meagar 是正确的,我忘记了匹配表单不会创建辅助方法。

于 2012-08-23T01:39:15.383 回答