无法注销权限 gem
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')
消息告诉您 sign_out
没有 get
路线,这是正确的。你必须做一个delete
。这意味着,尽管您对 method: :delete
做出了努力,但 link 正在执行 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
?
因此提供了更多对此的见解 by this previous SO。本质上,您不能使 link 作为 DELETE 方法运行,只能使 GET.
如果您查看 link_to
在页面上 HTML 中的实际呈现方式(在 Ruby 发挥其魔力之后),您将看到以下内容:
<a rel="nofollow" data-method="delete" href="/sign_out">Sign out</a>
而且很明显data-method="delete"
还是不打算砍掉它,仍然以GET
.
运行请求
但是我不要按钮,我想要一个link?
你最好的办法是查看元素上的一些 CSS,让它看起来像 link,否则,你需要走 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)
我最近将我的项目从有点臃肿的设计转移到清除,尽管我在尝试注销时遇到了麻烦
我目前收到路线不存在的错误
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')
消息告诉您 sign_out
没有 get
路线,这是正确的。你必须做一个delete
。这意味着,尽管您对 method: :delete
做出了努力,但 link 正在执行 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
?
因此提供了更多对此的见解 by this previous SO。本质上,您不能使 link 作为 DELETE 方法运行,只能使 GET.
如果您查看 link_to
在页面上 HTML 中的实际呈现方式(在 Ruby 发挥其魔力之后),您将看到以下内容:
<a rel="nofollow" data-method="delete" href="/sign_out">Sign out</a>
而且很明显data-method="delete"
还是不打算砍掉它,仍然以GET
.
但是我不要按钮,我想要一个link?
你最好的办法是查看元素上的一些 CSS,让它看起来像 link,否则,你需要走 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)