我有一個使用 Rails 6 和 Bootstrap gem 4.4.1 的應用程式在我使用設計 gem 的路線中:
devise_for :users, controllers: {
sessions: 'users/sessions',
confirmations: 'users/confirmations',
registrations: 'users/registrations'
}
在 views/layout/application.html.slim
doctype html
html
head
title
= full_title(yield(:title))
meta[name='viewport' content='width=device-width,initial-scale=1' charset='utf-8']
= csrf_meta_tags
= csp_meta_tag
= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload'
= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload'
= render 'layouts/shim'
= yield(:head)
body
= render 'layouts/header'
- flash.each do |message_type, message|
div class=("text-center alert alert-#{message_type}") = message
= yield
= render 'layouts/footer'
我使用 link_to 顯示用戶注銷路徑method: :delete:
= link_to "Log out", destroy_user_session_path, method: :delete
但No route matches [GET] "/users/sign_out"即使app/javascript/application.js我添加了錯誤
//= require jquery
//= require jquery_ujs
除了使用之外,還有什么辦法可以解決這個問題button_to嗎?
uj5u.com熱心網友回復:
也許您的 JavaScript 中有錯誤,請檢查您的控制臺,它不應該是 GET,而是 DELETE(在網路選項卡中,它會顯示帶有方法洗掉的 POST)
uj5u.com熱心網友回復:
您正在遵循過時的說明。
- Rails 6 默認使用 Webpacker而不是 Sprockets。您正在使用
javascript_pack_tag而不是較舊的javascript_include_tag. - Rails 5.1 替換
jquery_ujs為rails_ujs洗掉 jQuery 依賴項。
“神奇”的//=注釋被稱為鏈輪指令,在 Webpacker 中絕對不做任何事情——它只是一個注釋。Webpacker 改為使用importES6 中的指令。
當您生成 Rails 6 應用程式時,它實際上會創建一個app/javascripts/packs/application.js檔案,該檔案可以正確設定 Rails UJS、Turbolinks、ActiveStorage 和 ActionCable。
您還可以通過運行將其添加到現有應用程式中bin/rails webpacker:install。
// This file is automatically compiled by Webpack, along with any other files
// present in this directory. You're encouraged to place your actual application logic in
// a relevant structure within app/javascript and only use these pack files to reference
// that code so it'll be compiled.
import Rails from "@rails/ujs"
import Turbolinks from "turbolinks"
import * as ActiveStorage from "@rails/activestorage"
import "channels"
Rails.start()
Turbolinks.start()
ActiveStorage.start()
然后,您需要啟動 webpacker 開發服務器./bin/webpack-dev-server,它將為資產提供服務。與鏈輪不同,它沒有“捆綁”到rails server命令中。
除了使用button_to之外,還有什么辦法可以解決這個問題嗎?
是的。修復您的JavaScript設定(推薦)或使用config.sign_out_via = [:delete, :get]在config/intializers/devise.rb剛剛埋葬的bug。
但是,在這種情況下,我真的建議您使用button_to它,因為即使發生腳本錯誤,它也會讓您的用戶注銷。如果那是您的掛斷,您可以使用 CSS 隨意設定按鈕樣式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/359530.html
