我正在阅读Rails 3 In Action。本书构建了一类项目has_many :tickets
和一类belongs_to :project
的门票。 routes.rb文件如下所示:
resources :projects do
resources :tickets
end
现在,创建故障单的表单采用如下数组:
<%= form_for [@project, @ticket] do |f| %>
在票证show.html.erb页面上有如下链接:
<%= link_to "Edit Ticket", [:edit, @project, @ticket] %>
<%= link_to "Delete Ticket", [@project, @ticket], :method => :delete,
:confirm => "Are you sure you want to delete this ticket?" %>
现在我很困惑为什么需要将两个对象的数组传递给form_for()和link_to()。另外,为什么&#34;编辑门票&#34;要求和:编辑符号,而#34;删除票证&#34;不需要:销毁符号。
感谢, 麦克
答案 0 :(得分:6)
从包含两个资源的ID的URL嵌套资源路由,在这种情况下类似于:/projects/1/tickets/10
。要生成此URL,我们需要知道项目和故障单的ID,因此需要传入这两个对象。
编辑网址更进一步,并添加了一个操作关键字 - /projects/1/tickets/10/edit
,因此我们需要再次传递此操作。
然而,Rails中的RESTful销毁路由使用HTTP方法DELETE而不是action关键字,因此用于销毁票证的URL实际上是/projects/1/tickets/10
;只是使用DELETE请求而不是GET。
有关详细信息,建议您阅读Rails Routing from the Outside In