运行:
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)进行用户身份验证。
答案 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>
似乎给了我正在寻找的结果。感谢您的帮助,并指出了我正确的方向。 @阿兰 - 戈德曼。