Ruby On Rails - CRUD - 删除操作不起作用?

4
我已经完成了这个教程的大部分内容,并且已经到达添加删除文章功能的部分。

https://guides.rubyonrails.org/getting_started.html

...但是每当点击“删除”链接时,文章并没有被删除。什么也没有发生,而且发送的是一个GET请求,而不是DELETE请求。
从erb文件中:
<%= link_to 'Destroy', article_path(@article), data:{
  turbo_method: :delete,
  turbo_confirm: 'Are you sure?'
} %>

从控制器:
def destroy
    @article = Article.find(params[:id])
    @article.destroy
    redirect_to root_path, status: :see_other
end

尝试了在SO和各种网页中提到的解决方案(将以下内容添加到我的'application.html.erb'文件中:
<%= javascript_include_tag 'application', "data-turbo-track": "reload" %>

...我得到了这个错误:

ActionView :: Template :: Error(资产“application.js”不存在于资产管道中。

我进行了一些挖掘,意识到应用程序脚手架(在此示例中为rails new blog)甚至没有创建任何Javascript目录,更不用说向其中添加任何JS文件了。我可以自己添加它们,但我甚至不知道Rails和/或Turbo正在寻找哪些JS文件。JQuery?其他一些库吗?

然而,理想情况下,我想知道如何正确地搭建一个应用程序,以便包括任何必要的Javascript。

谢谢, Bryan

编辑 通过使用“非Turbo”删除项目的方法并使用“button_to”而不是“link_to”来触发“删除”链接,我已能够使删除功能正常工作。 但是- 我仍然想知道为什么教程中显示的应用程序无法按预期工作,以及如何使用链接而不是按钮触发项目删除(更不用说为什么使用turbo不起作用)。


你构建了你的资产吗?通常使用bin/dev来启动foreman进程。 - mechnicov
我的项目中没有'bin/dev'目录或可执行文件。 - Bryan Green
可能您在应用程序创建过程中遇到了一些错误,导致您的应用程序未被完全创建。 - mechnicov
3个回答

5

我也遇到了官方文档中提到的同样问题。经过数小时的研究,我成功让Turbo功能生效,只需在application.html.erb中添加以下代码即可:

<%= javascript_include_tag "turbo", type: "module" %>

说实话,我并不明白为什么这个方法有效,也不确定这是否是在Rails 7中使用Turbo的正确方法。


这并没有回答问题。一旦您拥有足够的 声望,您将能够在任何帖子上发表评论;相反,提供不需要询问者澄清的答案。- 来自审核 - Lajos Arpad

2

我成功地让它工作了!

在我尝试各种方法的过程中,我偶然发现了 turbo-rails gem 的提及。我通过以下这些部分找到了一个可行的解决方案:

  1. application.html.erb文件中添加以下内容:
    <%= javascript_include_tag "turbo", type: "module" %>
    
  2. 在Gemfile中添加gem "turbo-rails", "~> 1.0"
  3. 运行bundle install
  4. 运行bin/rails turbo:install
    注意:不确定是否需要执行此最后一步,但我是按照这里的说明操作的。
使用这些步骤,Rails指南中的代码可以正常工作,并且包括确认对话框。

0

所以我的答案是没有答案---但我相信Mechnicov说的是正确的,这个应用程序没有被正确地创建;我在Linux中重新创建了项目,一切都按预期工作。显然,在Windows中我的Ruby/Rails安装有问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接