【问题标题】:default route in railsrails中的默认路线
【发布时间】:2015-09-08 04:25:06
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    Rails 助手足够聪明,可以使用模型对象来形成 url。

    &lt;%= link_to 'Mostra', order %&gt; 等同于&lt;%= link_to 'Mostra', order_path(order) %&gt; 并且都指向订单显示页面。

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

    resources :orders
    

    订单 GET /orders/:id orders#show

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

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

    类似地,我们为所有 7 条路线都获得了帮助。您还可以覆盖帮助程序。

    更多信息请点击以下链接。

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

    【讨论】:

      【解决方案2】:

      首先,我建议在路由上遵循 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 提供的一些糖,以使事情更易于阅读。

      【讨论】:

        猜你喜欢
        • 2014-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多