rails 中的默认路线

default route in rails

我在写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。 它是如何工作的?

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

以下是按顺序回答您的问题。

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

Rails 帮助者足够聪明,可以使用模型对象来形成 url.

<%= link_to 'Mostra', order %>等同于<%= link_to 'Mostra', order_path(order) %>,都指向订单展示页面。

这将为您的控制器命令生成 7 条路线。

resources :orders

order GET /orders/:id orders#show

这里order是它提供的调用路由的辅助方法,而不是使用/orders/:id。

你可以简单地使用order_path(order)来获取路线/orders/:id

同样,我们得到了所有 7 条路线的助手。您还可以覆盖助手。

转至下方 link 了解更多信息。

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