2016-01-16 59 views
0

運行:如何呈現當前用戶進入導航-欄按鈕

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> 

我使用的設計(3.5.3)進行用戶身份驗證。

回答

1

您只需如果使用一個聲明摸出如果用戶signed_in(我相信這個方法存在於設計),並表現出不同的按鈕,如果用戶在簽署:

<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> 

你可能會想使用類似if, else, end聲明隱藏當current_user也是signed_in時,sign_in/sign_up按鈕 - 就像他們贏了一樣我不想看到這些。

0

這在設計中就足夠了。

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

您必須先詢問用戶是否存在。之所以這樣,是因爲如果你對未登錄的用戶運行.user_name,它本質上是運行一個無值的方法。這是一個很大的不,不。

before_filter :authenticate_user! 
+1

哪個控制器應該放置'before_filter:authenticate_user!'?在應用程序控制器中還是應該有一個用戶控制器? –

+0

@ M.TDavis這應該在呈現該視圖的控制器中進行。由於這個文件看起來像一個佈局文件,這可能應該是在應用程序控制器中。 –

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 %> 

參考文獻:

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>似乎給我我正在尋找的結果。感謝您的幫助,並指引我朝着正確的方向前進。 @阿蘭 - 高盛。