rails中的默认路由

时间:2015-06-22 16:03:55

标签: ruby-on-rails ruby-on-rails-4 routes scaffolding

当我编写rails代码时,我有一个疑问。 在我的link_to我使用我的路线order来显示我的订单。所以:

<% @orders.each do |order| %>
    <tr>
      <th><%= order.name %></th>
      <th><%= link_to 'Mostra', order %></th>
    </tr>
<% end %>

我看到了我的佣金路线,并且有一个:

order GET /orders/:id(.:format) orders#show

如果我没记错,我用脚手架生成了Order资源。但是,当我手工创建新资源(不使用脚手架) 我的资源有不同的路线。例如,我对节目有name_resource_show(:id)之类的东西。这种风格很好,因为我明白我必须传递id,如果我想看到一个特定的资源。但在前面的情况下,order的情况,我真的不知道rails如何能够理解使用对象顺序的id。并且: 为什么我有不同的路线名称?为什么我有时会_path,有时(也许当我用脚手架生成资源时)其他东西? 我希望order_show(:id)而不仅仅是order。 它是如何工作的?

2 个答案:

答案 0 :(得分:3)

Rails助手非常聪明,可以使用模型对象来形成URL。

<%= link_to 'Mostra', order %>相当于<%= link_to 'Mostra', order_path(order) %>,两者都指向订单显示页面。

这将为您的控制器订单生成7条路线。

resources :orders

订单 GET / orders /:id orders#show

此处订单是它为调用路由而不是使用/ orders /:id提供的帮助方法。

只需使用order_path(order)来获取路由/orders/:id

类似地,我们为所有7条路线提供帮助。您也可以覆盖帮助程序。

有关详细信息,请转到以下链接。

参考: http://guides.rubyonrails.org/routing.html

答案 1 :(得分:1)

首先,我建议遵循路线上的Rails约定(参见main reference article here)。

以下是您的问题的答案。

  • 您从rake routes获得的路线以下列方式有意义。查看URL(orders/:id)。在您的所有订单中,传递的:id指定要查看的订单。请求的GET性质表明您正在获取该记录的数据,即它是SHOW操作。
  • Rails了解ID的位置,因为路由的结构如何。如果您在路由中有order GET /orders/:year/:id,那么Rails将知道为其所需的ID查找第三个参数。
  • 用于访问路线选项的两个选项是_path_urlsee here for details),但我在顶部链接的主要参考文章中解释了一些替代方案。
  • 您仍然可以使用显式路由,但order选项只是Rails提供的一些糖,使事情更容易阅读。