我的网站上有一个注销链接,其中导航的设计方式是,我们希望包含该链接的整个 div 都是可点击的(想想大块)。我最初尝试了这个,它适用于除注销之外的所有导航链接 -
HTML
<nav>
<ul class="navigation">
<% if @nav[0] == 'home' %>
<li>my queue</li>
<% else %>
<li class="clickable"><%= link_to "my queue", root_path %></li>
<% end %>
<% if @nav[0] == 'virtuals' %>
<li>virtuals</li>
<% else %>
<li class="clickable"><%= link_to "virtuals", virtual_requests_path %></li>
<% end %>
<% if @nav[0] == 'artists' %>
<li>artists</li>
<% else %>
<li class="clickable"><%= link_to "artists", artists_path %></li>
<% end %>
<li class="clickable"><%= link_to "log out", session_path(current_user), method: "delete" %></li>
</ul>
</nav>
查询
$("div.clickable").on("click", function(){
returnloc($(this).find("a"));
});
function returnloc(loc){
window.location=(loc).attr("href");
return false;
}
这适用于所有其他导航按钮,但显然没有提供用于注销的 DELETE 方法。
所以我然后尝试使用该$.post
方法发送正确的 HTTP VERB,这似乎破坏了会话,但在页面刷新时实际上并没有将用户注销。
$("div.log-out").on("click", function(){
$.post($(this).find("a").attr("href"), { _method: 'delete' });
location.reload();
});
我确信有一个很好的方法可以做到这一点,但到目前为止还没有运气。
编辑:好的,所以我让它工作了,但我觉得这不是做到这一点的“导轨方式”。
将会话下的销毁路线更改为此-
get 'sessions/destroy', to: 'sessions#destroy', as: :destroy_session
然后将此添加到会话助手和会话控制器中,现在通过调用destroy_session_path可以正常工作,但这可以吗?
class SessionsController < ApplicationController
def destroy
sign_out
redirect_to root_url
end
end
Module SessionsHelper
def sign_out
self.current_user = nil
cookies.delete(:remember_token)
reset_session
end
end