ruby-on-rails Rails 7 Destroy不工作,只运行显示

wyyhbhjk  于 2022-11-19  发布在  Ruby
关注(0)|答案(2)|浏览(219)

我是Rails的新手。我想写一个删除我的评论。我按照教程中的代码。下面是显示页面中的代码

<% link_to "Delete this review", review_path(@review), method: :delete, data: { confirm: "Are you sure?" }  %>

下面是控制器中的代码

def destroy

    # find the individual review page, delete it then redirect to home page
    @review = Review.find(params[:id])
    
    #deleting the review
    @review.destroy

    #redirect to home page
    redirect_to root_path

end
# end of destroy

没有错误,没有确认,根本没有任何动作。当我检查命令行时,我注意到每当我点击销毁链接时,评论#show都在工作-
在2022年5月3日19:58:13 +0630开始GET“/reviews/4”用于::1通过审查控制器#处理显示为HTML参数:评论加载(0.2ms)SELECT评论.* FROM评论WHERE评论.“id”=?LIMIT?[[“id”,4],[“LIMIT”,1]]应用程序/控制器/评论_控制器.rb:51:in 'show'渲染布局布局/应用程序.html.erb渲染布局/应用程序内的评论/show.html. erb渲染布局/应用程序内的评论/show. html. erb(持续时间:0.7ms|分配:271)渲染的布局布局/应用程序.html.erb(持续时间:7.5ms|分配:2265)在10毫秒内完成200次OK(视图:8.6ms|活动记录:0.2ms|分配:小行星3049
我该如何修复它?

a9wyjsp7

a9wyjsp71#

不知怎么的,我解决了这个问题。我又读了几篇博客。这是javascript的问题。首先,我尝试了下面两种方法,但它们只发出GET请求:

  1. <% link_to "Delete this review", review_path(@review), method: :delete, data: { confirm: "Are you sure?" } %>
  2. <% link_to "Delete this review", review_path(@review), data: { turbo_method: :delete, turbo_confirm: "Are you sure?" } %>

我的解决方案

当我创建我的Rails项目时,它没有包含javascript;application.js(我不知道为什么,但我仍在尝试找出原因)。因此,我手动创建了它,并添加了以下代码:

//= require_tree
//= require jquery
//= require jquery_ujs

接下来,我转到gemfile并添加了gem 'jquery-rails'
跑了一个三个三个一个
然后,我返回到我的application.html.erb并添加javascript_include_tag:

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

最后我编辑了show.html.erb中的链接:

<%= link_to "Delete this review", @review, data: { 'method': :delete, 'confirm': "Are you sure?" } %>

最后它发出了一个DELETE请求。我仍然对我的结论感到困惑。有很多关于版本更改的“方法调用”的讨论。我的解决方案可能不是最好的方法,但至少我可以继续这样做。我也很想听听你的想法。
感谢您的所有意见。

qgelzfjb

qgelzfjb2#

摘自Ruby on Rails指南7.0.4

单击链接总是会导致HTTP GET请求。如果您的应用程序是REST风格的,则某些链接实际上是更改服务器上数据的操作,应该使用非GET请求执行。此属性允许使用显式方法(如“post”、“put”或“delete”)标记此类链接。
Turbo将扫描应用程序中的标记以查找turbo方法数据属性,并使用指定的方法(如果存在),覆盖默认的GET操作。

<%= link_to "Delete post", post_path(post), data: { turbo_method: "delete" } %>

对于确认

<%= link_to "Delete post", post_path(post), data: { turbo_method: "delete", turbo_confirm: "Are you sure?" } %>

另外值得一提的是,我的控制器中的destroy方法是:

def destroy
  @event = Event.find(params[:id])
  @event.destroy
  redirect_to events_path, status: :see_other
end

Rails/UJS功能的替换- 5.1方法

相关问题