【问题标题】:link_to destroy action results in get requestlink_to destroy 操作导致获取请求
【发布时间】:2013-08-17 01:19:33
【问题描述】:

我正在尝试创建链接以删除项目...

  <% @projects.each do |project| %>
    <h2><%= project.name %> (<%= project.videos.size %>)</h2> 
      <%= link_to("Delete!", {:controller=>'projects', :action=>'destroy', :id=>project.hashed_id}, {method: :delete} ) %>
  <% end %>

无论我做什么,我都会收到get 请求,因此我最终会进入项目/展示视图。哎呀!

我的控制器:

  def destroy
    @project = Project.where( :hashed_id=> params[:id]).first.destroy()
    flash[:notice]= "Project deleted"
    redirect_to(:action=>'index')
  end

我错过了什么?

PS:我找到了this,但该解决方案对我不起作用。

更新

$ rake routes
      Prefix Verb   URI Pattern                  Controller#Action
        root GET    /                            pages#home
    projects GET    /projects(.:format)          projects#index
             POST   /projects(.:format)          projects#create
 new_project GET    /projects/new(.:format)      projects#new
edit_project GET    /projects/:id/edit(.:format) projects#edit
     project GET    /projects/:id(.:format)      projects#show
             PATCH  /projects/:id(.:format)      projects#update
             PUT    /projects/:id(.:format)      projects#update
             DELETE /projects/:id(.:format)      projects#destroy

更新 2 这是我得到的错误:

【问题讨论】:

  • 为 link_to 渲染了什么 HTML?
  • 你试过link_to("Delete!", project_path(project), action: :delete)
  • 你有公开的代码库吗?
  • @Ben 还没有。目前都是本地的,
  • 好的,没问题。您得到的 NoMethodError 是因为 @project 为零。这意味着,首先要检查的是您的show 操作是否返回非零@project

标签: ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

粘贴rake routes 的输出。我怀疑路由不匹配,这就是为什么它改为#show

确保您也安装了 jquery-rails。

Delete / Destroy is not working in rails 3 with jQuery

一般来说,请确保您已包含所有必要的 javascript 文件。

【讨论】:

  • 刚刚添加到上面的问题中。
  • 为什么我的问题与 JavaScript 有关? (我是 Rails n00b)
  • 还有什么最好的检查方法?
  • 它与不显眼的 javascript 有关。最好的检查方法是粘贴您的Gemfileapplication.js,并确保您包含 js。
  • @BenjaminTan 这是一个 JavaScript 问题。我评论了我们的 application.js 标记,因为该文件是空的,但显然这比我意识到的要多,因为当我取消注释它时,删除请求按预期工作!
【解决方案2】:

做这样的事情:

控制器:

def destroy
  Flower.find(params[:id]).destroy
  redirect_to :action => 'index'
end

观看次数:

<%= link_to 'Destroy', flower_path(flower), method: :delete, data: { confirm: 'Are you sure?' } %>

【讨论】:

  • 嗨 Sami,我尝试使用 project_path(project) 而不是 :action/:controller 语法,但我STILL收到了一个获取请求。
  • 能否显示你的错误信息,最新控制器的销毁方法和标签链接。
  • 上面添加了错误信息。
  • 在您的项目中找不到名称
  • 找不到名称,因为它正在渲染显示视图,但控制器未能传递项目对象
【解决方案3】:

试试这个:

<%= link_to 'Destroy', project_path(project), method: :delete %>

它应该工作。 如果没有,请将服务器日志粘贴到 cmets 中或尝试检查您生成的路径。

或者检查你的rails c:

app.project_path(Project.first)

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多