【问题标题】:Delete link sends "Get" instead of "Delete" in Rails 3 view删除链接在 Rails 3 视图中发送“获取”而不是“删除”
【发布时间】:2011-04-16 01:15:25
【问题描述】:

我正在使用 Rails 3,并且有一个页面可以输出数据库中的帖子列表。我希望能够从链接中删除帖子。

下面的第二个例子有效,但第一个无效。有人知道为什么第一个不起作用吗?我的观点包含:

# this link sends a "GET" request which asks for the #show function  
<%= link_to 'Delete', post, :method => :delete %>

# this link sends the proper "DELETE" request which asks for the #destroy function
<%= button_to 'Delete', post, :method => :delete %>

我的路线文件包含以下内容:

resources :posts 

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    我在 Rails 6 中遇到了同样的问题。 Romanex 的解决方案包括:

    &lt;%= javascript_include_tag "rails-ujs" %&gt; 在头部标签 & config/initializers/assets 中的 Rails.application.config.assets.precompile += %w( rails-ujs.js ) 也解决了设计中的 destroy_user_session 无法删除的问题。

    所以这个解决方案也适用于这个问题Ruby on Rails - devise users/sign_out not working

    【讨论】:

      【解决方案2】:

      我在 rails 5.2.3 中遇到了同样的问题,这对我有帮助:

      布局头:

      <%= javascript_include_tag "rails-ujs" %>
      

      配置/初始化器/资产

      Rails.application.config.assets.precompile += %w( rails-ujs.js )
      

      【讨论】:

        【解决方案3】:

        在我使用 Rails 5 的情况下,我在布局中使用了以下内容:

        <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
        

        这样:

        ... </title>
          <%= csrf_meta_tags %>
          <%= csp_meta_tag %>
        ...
         <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
         </head>
        

        【讨论】:

          【解决方案4】:

          试试这个..这是一个简单的改变..

          将此添加到您的 route.rb 文件中

          get '/lists/:list_id/cmets/:id' => 'cmets#destroy'

          我做了这个改变,现在它可以工作了..

          【讨论】:

            【解决方案5】:

            这会奏效。问题在于您需要将其传递给正确的路径,以便路线获得它。

            <%= link_to 'Delete', post_path(post.id), :method => :delete %>
            

            【讨论】:

              【解决方案6】:

              看起来像

              <%= javascript_include_tag :defaults %>
              

              不再支持

              http://apidock.com/rails/ActionView/Helpers/AssetTagHelper/JavascriptTagHelpers/javascript_include_tag

              相反,您应该使用

              <%= javascript_include_tag 'application' %>
              

              【讨论】:

              • 这适用于 Rails 4.0.3。我尝试应用已接受的答案,但直到我在此处进行了您指出的替换,它才起作用。
              【解决方案7】:

              破坏性操作应作为表单提交执行 - http://www.w3.org/2001/tag/doc/whenToUseGet.html#checklist

              您可以为删除方法或使用表单设置适当的按钮样式。

              【讨论】:

                【解决方案8】:

                就我而言,我使用的是以下功能。

                <%= javascript_include_tag :defaults %>
                <%= csrf_meta_tag %>
                

                我还通过在默认原型 JS 下方包含 jQuery 来使用 jQuery。这引起了某种冲突。

                【讨论】:

                  【解决方案9】:

                  确保布局中的 &lt;head&gt; 部分包含以下内容:

                  <%= javascript_include_tag :defaults %>
                  <%= csrf_meta_tag %>
                  

                  在 Rails 3 中,删除请求是在 JavaScript 的帮助下处理的,以确保请求被正确发送。如果您没有 csrf 元标记和所需的 JavaScript 代码,删除 links 将不起作用。 :defaults JavaScript 文件包括——其中包括——prototype.js 和 application.js。后者包含使链接工作的东西,但依赖于 Prototype 框架。

                  如果您不想使用默认的 Prototype JavaScript 库,可以使用其他几个框架的 application.js 端口。例如,您可以找到 jQuery 之一 here。

                  无论使用 JavaScript,按钮仍然可以工作,因为使用 button_to 生成的 HTML 代码本身包含所有必要的信息。这就是为什么您看到按钮有效而链接无效的原因。

                  【讨论】:

                  • 谢谢 - 您能否发布一个链接以了解有关 rails 3 的此功能的详细信息?
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-03-17
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-02-08
                  相关资源
                  最近更新 更多