我们在工作中使用Rails 5.2,资产管道已被删除。作为 Rails 新手,我不断遇到方法无法按我预期工作的问题。
例如,以下
link_to
提取内容将作为 GET 请求而不是 DELETE 进行处理,并且不会显示确认信息。
<%=link_to 'Delete', admin_enhanced_object_media_item_path(@enhanced_object, media_item), method: :delete, data: { confirm: 'Are you sure?' }, class: 'btn btn--danger' %>
以下 SO 问答帮助我理解它与缺少的 Rails-ujs 或 jquery 依赖项有关,并且我能够通过替换为
button_to
来恢复部分功能。
Rails 的 link_to 方法:在应该 DELETE 时获取
这解决了方法错误,但仍然没有显示确认警报。
我可以看到Rails源代码(coffeescript)中缺少的方法https://github.com/rails/rails/tree/master/actionview/app/assets/javascripts/rails-ujs/features
鉴于我无法安装 Rails-ujs,我可以在应用程序 javascript 文件中用 vanilla JS 替换这些辅助方法。谁能给我举一个例子来说明这一点已经完成或解释过吗?我希望其他人在没有 Rails 资产管道的情况下工作,但希望保持对此处列出的不显眼的 javascript 帮助程序的访问:https://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html#rails-ujs-event-handlers
所以这已经很老了,自 5.2 以来已经发生了很多变化,但我发现自己处于几乎完全相同的情况,我认为随着越来越多的人对资产管道的变化做出不同的决定,它会变得越来越相关。
要做的第一件事是将
@rails/ujs
添加到您选择的打包程序(例如 Webpack、vite 等)中。在我写这篇文章的时候,有两个分支,评论中提到的那个分支落后了两个主要版本。这个好像还在更新。
之后,您需要导入它(可能导入到入口点)并调用它
import Rails from '@rails/ujs'
Rails.start()
这将允许您使用所有 UJS 方法(或者在我的例子中,在删除资产管道后修复所有损坏的方法)。该包大小为 32kb(未压缩或压缩)。您很可能只需从 github 代表 获取所需的方法并将其复制到您的项目中即可减少这种情况。实际功能在过去几年中没有太大变化。