Rails 6:用GET代替DELETE链接到destroy_user_session_path。

问题描述 投票:0回答:1

我刚刚开始了一个简单的Rails 6.0.3.1项目。

我正在设置Devise动作,但注销链接似乎没有工作。它正在执行一个 GET 请求而不是 DELETE 尽管我指定了方法。

- if user_signed_in?
  = link_to 'Logout',
    destroy_user_session_path,
    class: 'button is-light',
    method: :delete

点击链接会产生:

Rails error message showing the GET request

控制台中没有错误。

no console errors on click

我的 app/javascript/packs/application.js 看起来像这样。

require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")

所以Rails ujs应该拦截链接的点击并执行一个 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线程上寻找解决方案 但我没有找到合适的方法。有些人建议用按钮代替链接,但我想要的是链接而不是按钮。

这个问题发生在我通过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' %>

我已经创建了一个 简单的假人应用 来重现这个问题。

有什么建议,我可能在这里做得不正确吗?

先谢谢你

ruby-on-rails webpacker rails-ujs
1个回答
1
投票

我最终找到了解决方案。

我创建了文件 app/javascript/stylesheets/application.scss 我把线的位置。

@import '~bulma';

然后,在 app/javascript/stylesheets/application.js 我添加了这一行。

import 'stylesheets/application'

看来webpacker需要application.js文件导入相应的CSS文件才能工作。


0
投票

你能在问题中加上你的html源码吗?

另外,你也可以试试这个。

- if user_signed_in?
  = link_to 'Logout',
    destroy_user_session_path,
    class: 'button is-light',
    data: {method: :delete}

注意这部分: data: {method: :delete}

© www.soinside.com 2019 - 2024. All rights reserved.