1

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

1 回答 1

1

尝试这个:

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

[编辑]

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

于 2013-10-30T13:51:09.487 回答