将数组传入form_for()和link_to()

时间:2012-05-23 05:18:07

标签: ruby-on-rails

我正在阅读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;不需要:销毁符号。

感谢, 麦克

1 个答案:

答案 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