为什么我的RoR链接指向错误的控制器操作



我的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中有问题的地方。

目前还没有足够的信息来了解你的问题是什么。

最新更新