4

我正在阅读 Rails 3 In Action。本书构建了一个 Projects whichhas_many :tickets类和一个 Tickets which 类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()。另外,为什么“编辑票证”需要和 :edit 符号,而“删除票证”不需要 :destroy 符号。

谢谢,迈克

4

1 回答 1

6

从包含两个资源 ID 的 URL 嵌套资源路由,在本例中类似于:/projects/1/tickets/10。要生成这个 URL,我们需要知道项目的 id 和票证,所以这两个对象都需要传入。

一个编辑 URL 更进一步,并添加了一个动作关键字 - /projects/1/tickets/10/edit,所以我们需要再次传入这个动作。

然而,Rails 中的 RESTful 销毁路由使用 HTTP 方法 DELETE 而不是 action 关键字,因此销毁票证的 URL 确实是/projects/1/tickets/10; 只需使用 DELETE 请求而不是 GET。

有关更多信息,我建议从外向内阅读 Rails Routing

于 2012-05-23T06:15:56.363 回答