用jquery注销按钮

时间:2013-10-30 13:37:06

标签: jquery ruby-on-rails session

我的网站上有一个注销链接,导航的设计方式是这样,我们希望包含链接的整个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

1 个答案:

答案 0 :(得分:1)

试试这个:

<%= link_to session_path(current_user), method: "delete" do %>
  <div class="clickable">
  </div>
<% end %>

[编辑]

我的代码错了,在第一个ruby标签中忘了'do'(现在添加它)。另外,请不要忘记在要包含在链接中的部分之后添加匹配的<% end %>