在开发模式下运行Rails时,我单击这样的删除链接:
<%= link_to "Delete", scenario_path(@scenario), method: :delete %>
它将按预期删除记录。
但是,当我在生产环境中运行相同的代码时,它会向显示页面发出请求,并且不会删除记录。
可能是什么原因造成的?
答案 0 :(得分:1)
按下链接时,Rails使用rails-ujs
向服务器提交表单。这是因为链接始终是GET请求,而rails则需要DELETE请求才能删除记录。
因此,如果您从//= require rails-ujs
中删除了application.js
,它将不会加载,并且请求将是GET而不是DELETE。或者在旧版的Rails //= require jquery_ujs
这就是引起我问题的原因。因此,当我添加rails-ujs
时,它又开始工作了。您可以通过在应用程序上禁用JS来确认这一点,并且您会发现DELETE请求不再起作用。添加rails-ujs
的另一种方法是使用表单按钮而不是链接,如下所述:https://www.viget.com/articles/delete-in-rails-without-jquery-and-ujs/
<%= button_to "Delete", post_comment_path(@post, comment), method: :delete %>