我的网站上有一个注销链接,导航的设计方式是这样,我们希望包含链接的整个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>
JQUERY
$("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();
});
我确定有很好的方法可以做到这一点,但到目前为止还没有运气。
编辑: 好的,所以我有它工作,但我觉得这不是&#34; rails方式&#34;这样做。
在会话下将我的销毁路线更改为 -
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
答案 0 :(得分:1)
试试这个:
<%= link_to session_path(current_user), method: "delete" do %>
<div class="clickable">
</div>
<% end %>
[编辑]
我的代码错了,在第一个ruby标签中忘了'do'(现在添加它)。另外,请不要忘记在要包含在链接中的部分之后添加匹配的<% end %>