簡體   English   中英

無法注銷清除寶石

[英]Unable to log out of clearance gem

我最近將我的項目從有些過時的設計轉移到了許可,盡管嘗試注銷時遇到麻煩

我目前收到路線不存在的錯誤

No route matches [GET] "/sign_out"

路線

resources :passwords, controller: "clearance/passwords", only: [:create, :new]
  resource :session, controller: "clearance/sessions", only: [:create]

  resources :users, controller: "clearance/users", only: [:create] do
    resource :password,
      controller: "clearance/passwords",
      only: [:create, :edit, :update]
  end

  get "/sign_in" => "clearance/sessions#new", as: "sign_in"
  delete "/sign_out" => "clearance/sessions#destroy", as: "sign_out"
  get "/sign_up" => "clearance/users#new", as: "sign_up"

  constraints Clearance::Constraints::SignedIn.new do
    root :to => 'shopping/merchants#index', as: :signed_in_root
  end

  constraints Clearance::Constraints::SignedOut.new do
    root to: 'clearance/sessions#new'
  end

視圖

= link_to sign_out_path, method: :delete, class: 'mdl-navigation__link' do
    i.material-icons> exit_to_app
    = t('.log_out')

此消息通知您有沒有get路由sign_out ,這是正確的。 您必須delete 這意味着,盡管您使用method: :delete了努力,但鏈接仍在執行get請求。 您的link_to某些地方不正確。 在使用link_to的塊形式時,可能與傳遞method有關。

嘗試:

<%= button_to "Sign Out", sign_out_path, method: :delete %>

如果可行,請嘗試:

<%= link_to "Sign Out", sign_out_path, method: :delete %>

如果這兩種方法都起作用,那么問題的確與您使用link_to幫助程序的塊形式的方式有關,而與Clearance無關。

我以為我會跟進此事,對那些發現自己仍然在想這到底是什么的人有更多的見解。

正如Derek所建議的那樣,要對此進行排序,您需要使用button_to而不是link_to ,如下所示:

<%= button_to "Sign Out", sign_out_path, method: :delete %>

為什么我不能只使用link_to

因此,以前的SO對此提供更多的見解。 本質上,您不能使鏈接僅作為GET用作DELETE方法。

如果您查看link_to在頁面上的HTML中實際呈現的方式(在Ruby發揮作用之后),您將看到以下內容:

<a rel="nofollow" data-method="delete" href="/sign_out">Sign out</a>

顯然, data-method="delete"仍然不會削減它,並且仍將請求作為GET運行。

但是我不需要按鈕,我想要鏈接嗎?

最好的選擇是查看元素上的一些CSS,使其恢復為看起來像鏈接的方式,否則,您將需要使用Javascript路線。

非RESTFUL清除中心臟黑客-不建議!

使用link_to ,更改您的routes.rb ,其中許可路線當前顯示為:

  delete     "/sign_out" => "clearance/sessions#destroy", as: "sign_out"

至:

  get     "/sign_out" => "clearance/sessions#destroy", as: "sign_out"

它將GET請求路由到Clerance控制器上的destroy動作。 我敢說這是不建議的,Derek可以支持為什么不首先支持此功能(Devise gem確實支持此骯臟的hack)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM