如何在Rails中创建删除操作的链接(使用路径和link_to)?

时间:2012-03-14 22:36:21

标签: ruby-on-rails hyperlink

到目前为止,我已经设法提出了这段代码:

  1   <% @projects.each do |p| %>
  2       <%= link_to p.name, project_path(p) %>
  3       <%= link_to "edit", edit_project_path(p) %>
  4       <%= link_to "delete", project_path(p), :method => :delete %>
  5   <% end %>

当我点击“删除”链接时,它会将我带到destroy.html.erb,而不是delete.html.erb。它还与控制器的“销毁”动作进行通信,而不是与“删除”动作进行通信。此外,URL看起来像/ projects / 1(没有/删除或/销毁)。这有什么不对?这是创建删除链接的最佳方式吗?

2 个答案:

答案 0 :(得分:1)

这是Rails的正确行为。 :delete方法链接到destroy操作并且不向URL添加任何内容 - 通过HTTP谓词连接正确的操作。有关Rails路由结构和默认值的更多信息,请查看the Rails routing guide

答案 1 :(得分:1)

Veraticus是绝对正确的。 Rails正在做它应该做的事情。

但是,如果您实际上想要转到删除页面(而不是使用javascript确认),那么肯定会这样做。

例如,如果我有一个'Pages'控制器,那么我可以同时执行'delete'和'destroy'操作:

  def delete
    @page = Page.find(params[:id])
    render 'delete'
  end

  def destroy
    page = Page.find(params[:id])        
    page.destroy
    flash[:notice] = "Page successfully destroyed"
    redirect_to(:action => 'index')
  end

在您的Page index视图中,您需要一个将page.id传递给delete方法的链接:

<%= link_to "delete",{ :action => 'delete', :id => @page.id } %>

当然,您需要在视图文件夹中创建一个“删除”视图,以便为其呈现内容。

在'delete.html.erb'文件中,您需要一个发送销毁操作的表单:

<%= form_for(:page, :url => {:action => 'destroy', :id => @page.id }) do |f| %>
   < All your form components and submit tag will go here >
<% end %>