我的projects_controller.rb
:中有以下内容
def destroy
@project = Project.find_by_slug(params[:id])
@project.destroy
redirect_to projects_url
end
我的routes.rb
文件中有以下内容:
delete "projects/:id", to: "projects#destroy", as: "destroy_project"
我有以下链接(在show.html.erb
文件中(:
<%= link_to destroy_project_path(@project), method: :delete, class: "btn-gradient btn-red" do %>
<span>Delete Project</span>
<% end %>
单击按钮后,页面将重新加载。单击按钮后会调用show
操作。我在每个方法中都添加了控制台日志,很明显,销毁操作从未被调用。
有人能给我指正确的方向吗?
link_to
帮助程序接收两组不同的选项哈希。
第一组用于http方法,第二组用于html属性(class、id等(
按照您的编写方式,您的查询参数中可能有method=delete
,这是错误的。您必须将method: :delete
显式地包含在其自己的选项哈希中:
<%= link_to destroy_project_path(@project), { method: :delete }, class: "btn-gradient btn-red" do %>
<span>Delete Project</span>
<% end %>
如果您使用rails 7和turbo框架,您可以尝试下面的按钮。
<%= button_to "Delete this project", destroy_project_path(@project), method: :delete %>
或者你可以尝试下面的链接。
<%= link_to destroy_project_path(@project.id) , data: { turbo_method: :delete } do %>
<span>Delete Project</span>
<% end %>
您遇到的问题是JS。存在某个东西加载不正确的问题。
为了测试,试着删除你的JS并使用类似于的东西
<%= javascript_include_tag "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.js" %>
当delete方法工作时,您可以调试JS中有问题的地方。
目前还没有足够的信息来了解你的问题是什么。