Rails 6:link 到 destroy_user_session_path 使用 GET 而不是 DELETE
Rails 6: link to destroy_user_session_path using GET instead of DELETE
我刚刚开始一个简单的 Rails 6.0.3.1 项目。
我正在设置 Devise 操作,但注销 link 似乎不起作用。尽管我指定了方法,但它执行的是 GET
请求而不是 DELETE
:
- if user_signed_in?
= link_to 'Logout',
destroy_user_session_path,
class: 'button is-light',
method: :delete
单击 link 会产生:
控制台没有错误:
我的 app/javascript/packs/application.js
看起来像这样:
require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")
所以 Rails ujs 应该拦截 link 点击并执行 DELETE
,但它不是。
我的 config/webpack/environment.js
看起来像这样:
const { environment } = require('@rails/webpacker')
const { VueLoaderPlugin } = require('vue-loader')
const vue = require('./loaders/vue')
environment.plugins.prepend('VueLoaderPlugin', new VueLoaderPlugin())
environment.loaders.prepend('vue', vue)
module.exports = environment
我尝试在其他 SO 线程上搜索解决方案,但没有找到有效的方法。有些人建议使用按钮而不是 link,但我想要 link 而不是按钮。
问题发生在我通过 yarn 安装 Bulma CSS 框架后:
yarn add bulma
然后我将其导入到 app/javascript/packs/application.scss
中的项目中:
@import '~bulma';
我的布局文件 (application.html.erb
) 包括以下行:
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
<%= stylesheet_pack_tag 'application' %>
我创建了一个 simple dummy app 来重现该问题。
关于我在这里可能做错的事情有什么建议吗?
提前致谢!
能否在问题中添加 html 来源?
此外,您也可以试试这个:
- if user_signed_in?
= link_to 'Logout',
destroy_user_session_path,
class: 'button is-light',
data: {method: :delete}
注意部分:data: {method: :delete}
我最终找到了解决方案。
我创建了文件 app/javascript/stylesheets/application.scss
并在其中放置了以下行:
@import '~bulma';
然后,在 app/javascript/stylesheets/application.js
中我添加了以下行:
import 'stylesheets/application'
似乎 webpacker 需要 application.js 文件来导入适当的 CSS 文件才能工作。
我刚刚开始一个简单的 Rails 6.0.3.1 项目。
我正在设置 Devise 操作,但注销 link 似乎不起作用。尽管我指定了方法,但它执行的是 GET
请求而不是 DELETE
:
- if user_signed_in?
= link_to 'Logout',
destroy_user_session_path,
class: 'button is-light',
method: :delete
单击 link 会产生:
控制台没有错误:
我的 app/javascript/packs/application.js
看起来像这样:
require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")
所以 Rails ujs 应该拦截 link 点击并执行 DELETE
,但它不是。
我的 config/webpack/environment.js
看起来像这样:
const { environment } = require('@rails/webpacker')
const { VueLoaderPlugin } = require('vue-loader')
const vue = require('./loaders/vue')
environment.plugins.prepend('VueLoaderPlugin', new VueLoaderPlugin())
environment.loaders.prepend('vue', vue)
module.exports = environment
我尝试在其他 SO 线程上搜索解决方案,但没有找到有效的方法。有些人建议使用按钮而不是 link,但我想要 link 而不是按钮。
问题发生在我通过 yarn 安装 Bulma CSS 框架后:
yarn add bulma
然后我将其导入到 app/javascript/packs/application.scss
中的项目中:
@import '~bulma';
我的布局文件 (application.html.erb
) 包括以下行:
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
<%= stylesheet_pack_tag 'application' %>
我创建了一个 simple dummy app 来重现该问题。
关于我在这里可能做错的事情有什么建议吗?
提前致谢!
能否在问题中添加 html 来源?
此外,您也可以试试这个:
- if user_signed_in?
= link_to 'Logout',
destroy_user_session_path,
class: 'button is-light',
data: {method: :delete}
注意部分:data: {method: :delete}
我最终找到了解决方案。
我创建了文件 app/javascript/stylesheets/application.scss
并在其中放置了以下行:
@import '~bulma';
然后,在 app/javascript/stylesheets/application.js
中我添加了以下行:
import 'stylesheets/application'
似乎 webpacker 需要 application.js 文件来导入适当的 CSS 文件才能工作。