如何将当前用户渲染到导航栏按钮

时间:2016-01-16 03:13:12

标签: ruby-on-rails ruby devise

运行:

ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux]
Rails 4.2.5

我想使用下拉菜单类将当前用户名渲染到导航栏按钮。我想更换"帐户信息"用"嗨" current_user"。

<li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Account Info <span class="caret"></span></a>
          <ul class="dropdown-menu">
          <li> <%= link_to "Edit Profile", edit_user_registration_path, class: "fa fa-pencil-square-o" %></li>
          <li> <%= link_to "Sign out", destroy_user_session_path, method: :delete, class: "fa fa-sign-out" %></li>
          </ul>
          <ul class = "nav pull-right">
     </ul>
        <% else %>
         <!-- <%= link_to "Sign up", new_user_registration_path,  class: "fa fa-sign-in" %> -->
          <li><%= link_to "Sign in", new_user_session_path, class: "fa fa-sign-in" %></li>
        <% end %>
      </ul>

我使用devise(3.5.3)进行用户身份验证。

4 个答案:

答案 0 :(得分:1)

如果用户是signed_in(我假设此方法存在于Devise中),您只需要使用if语句来计算;如果用户已登录,则显示不同的按钮:

<li class="dropdown">
    <% if signed_in? %> 
       <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Hi, <%= current_user.user_name %> <span class="caret"></span></a>
    <% else %>
      <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Account Info <span class="caret"></span></a>
   <% end %>
      <ul class="dropdown-menu">
      <li> <%= link_to "Edit Profile", edit_user_registration_path, class: "fa fa-pencil-square-o" %></li>
      <li> <%= link_to "Sign out", destroy_user_session_path, method: :delete, class: "fa fa-sign-out" %></li>
      </ul>
      <ul class = "nav pull-right">
 </ul>
    <% else %>
     <!-- <%= link_to "Sign up", new_user_registration_path,  class: "fa fa-sign-in" %> -->
      <li><%= link_to "Sign in", new_user_session_path, class: "fa fa-sign-in" %></li>
    <% end %>
  </ul>

当current_user也是signed_in时,您可能希望使用类似的if, else, end语句来隐藏sign_in / sign_up按钮 - 因为他们不希望看到它。

答案 1 :(得分:0)

这对您的设计来说就足够了。

<%- if user_signed_in? %>
  <%= current_user.user_name %>
<% end %>

您必须首先询问用户是否存在。原因是因为如果您对未登录的用户运行.user_name,则实际上是在nil值上运行方法。哪个是大不了。

现在,如果您仍然遇到问题,您必须确保在控制器中有此问题:

before_filter :authenticate_user!

答案 2 :(得分:0)

<%= content_tag :li, class: "dropdown" %>
   <% if user_signed_in? %>
      <%= link_to "Hi, #{current_user}", "#", data: {toggle: "dropdown"}, role: :button, aria: {haspopup: "true", expanded: "false"}  %>
      <%= content_tag :ul, class: "dropdown-menu" do %>
         <%= content_tag :li, link_to("Edit Profile", edit_user_registration_path, class: "fa fa-pencil-square-o") %>
         <%= content_tag :li, link_to("Sign out", destroy_user_session_path, method: :delete, class: "fa fa-sign-out") %>
      <% end %>
   <% else %>
      <%= content_tag :li, link_to("Sign in", new_user_session_path, class: "fa fa-sign-in") %>
   <% end %>
<% end %>

参考文献:

答案 3 :(得分:0)

<%= current_user.first_name %>中的某些测试<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Hi, <%= current_user.first_name %> <span class="caret"></span></a>似乎给了我正在寻找的结果。感谢您的帮助,并指出了我正确的方向。 @阿兰 - 戈德曼。