当我编写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
。
它是如何工作的?
答案 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条路线提供帮助。您也可以覆盖帮助程序。
有关详细信息,请转到以下链接。
答案 1 :(得分:1)
首先,我建议遵循路线上的Rails约定(参见main reference article here)。
以下是您的问题的答案。
rake routes
获得的路线以下列方式有意义。查看URL(orders/:id
)。在您的所有订单中,传递的:id
指定要查看的订单。请求的GET
性质表明您正在获取该记录的数据,即它是SHOW操作。order GET /orders/:year/:id
,那么Rails将知道为其所需的ID查找第三个参数。_path
和_url
(see here for details),但我在顶部链接的主要参考文章中解释了一些替代方案。order
选项只是Rails提供的一些糖,使事情更容易阅读。