【问题标题】:Log out button with jquery带有jquery的注销按钮
【发布时间】:2013-11-10 02:50:59
【问题描述】:

我的网站上有一个注销链接,其中导航的设计方式是,我们希望包含该链接的整个 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();
});

我确信有一个很好的方法可以做到这一点,但到目前为止还没有运气。

编辑: 好的,我让它工作了,但我觉得这不是“rails 方式”。

将会话下的销毁路线更改为此 -

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

【问题讨论】:

  • 这条路线不使用DELETE方法可以吗?

标签: jquery ruby-on-rails session


【解决方案1】:

试试这个:

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

[编辑]

我的代码错误,在第一个 ruby​​ 标记中忘记了“do”(现在添加)。另外不要忘记在您想要包含在链接中的部分之后添加匹配的&lt;% end %&gt;

【讨论】:

  • 实际上我们把它改成了
  • (更好的 html) 然后我尝试了这个
  • 注销
  • 但rails 不喜欢它 - 语法错误,意外的keyword_ensure,期待$end
  • 你能发布更多代码吗?我无法理解这是如何导致错误的
  • 当然我会用我拥有的完整代码编辑帖子,而且我找到了一个可行的解决方案,但它不使用 DELETE http 动词,有点担心。跨度>
  • 是的,您可能应该使用 DELETE 动词,您发布的方式有点 hacky
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签