到目前为止,我已经设法提出了这段代码:
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(没有/删除或/销毁)。这有什么不对?这是创建删除链接的最佳方式吗?
答案 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 %>