2014-11-10 21 views
5

Bir if, elsif, html.erb dosyasındaki başka bir terimle sorun yaşıyorum. Erb'deki if/else ifadeleriyle ilgili birçok soru gördüm ama elsif içeren hiçbir şey bu yüzden yardım isteyeceğimi düşündüm. İşteif, elsif, else ifadeleri html erb beginner

<% if logged_in? %> 

      <ul class = "nav navbar-nav pull-right"> 
      <li class="dropdown"> 
      <a href="#" class="dropdown-toggle" data-toggle="dropdown"> 
       Account <b class="caret"></b> 
      </a> 

      <ul class="dropdown-menu pull-right"> 
        <li><%= link_to "Profile", current_user %></li> 
        <li><%= link_to "Settings", edit_user_path(current_user) %></li> 
        <li class="divider"></li> 
        <li> 
        <%= link_to "Log out", logout_path, method: "delete" %> 
      </li> 
      </ul> 
      </li> 
     </ul> 



    <% elsif has_booth?(current_user.id) %> 

     <ul> 

     <li>TEST</li> 

     </ul> 



<% else %> 
     <ul class="nav navbar-nav pull-right"> 
      <li><%= link_to "Sign Up", signup_path %></li> 
      <li><%= link_to "Log in", login_path %></li> 
     </ul> 
     <% end %> 

benim has_booths yöntemdir:

module BoothsHelper 

def has_booth?(user_id) 
    Booth.exists?(user_id: user_id) 
end 

end 

Ben farklı kullanıcılar için içerik üç farklı türde olması başlık nav istiyorum

İşte benim html.erb olduğunu. Giriş yapmış kullanıcı, bir stand oluşturmuş olan giriş yapmış kullanıcı ve çıkış yapan kullanıcı. Şimdiye kadar, sadece üç çalışmadan 2 tane çıkabiliyorum. Ben

<% elsif logged_in? && has_booth?(current_user.id) %> 

için

<% elsif has_booth?(current_user.id) %> 

değişen çalıştı ve bu da işe yaramadı. Bildirimi doğru yazıyor muyum? Herhangi bir düşünce takdir edildi. Teşekkürler.

cevap

12

Sorun şu ki, ilk durumunuz doğru, bu yüzden orada durur. İlk koşul: İlk koşul doğru olduğu için

<% if logged_in? %> 

onlar değil bir stand yapmak zorunda bile, ELSIF ulaşmak asla. Ya gerek: açıklama için

<% if logged_in? %> 
    <% if has_booth?(current_user.id) %> 
    // code 
    <% else %> 
    // code 
    <% end %> 
<% else %> 
    // code 
<% end %> 
+0

teşekkür:

<% if logged_in? && has_booth?(current_user.id) %> // code <% elsif logged_in? && !has_booth?(current_user.id) %> // code <% else %> // code <% end %> 

Ya da iki/else if içine ayırmak için daha temiz bir yaklaşım olabilir. İlk çözümü uyguladım ve işe yaradı. Temizleyici gelince, her iki örnek doğruysa ilk kod bloğu olur, ikincisi sadece eğer oturum açarsa? Doğru ve üçüncü blok başka? Tekrar teşekkürler. – Kelly

+0

Bir şey değil, ve bu daha temiz yaklaşımı özetlediğin gibi doğru. – RichardAE