2014-11-10 16 views
5

Sto riscontrando problemi con un if, elsif, else statment in html.erb. Ho visto molte domande riguardo le dichiarazioni if ​​/ else in erb ma nessuna che includesse elsif quindi ho pensato di chiedere aiuto.if, elsif, else statements html erb beginner

Ecco il mio html.erb:

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

Ecco il mio metodo has_booths:

module BoothsHelper 

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

end 

Vorrei l'intestazione nav di avere tre diversi tipi di contenuti per utenti diversi. L'utente che ha effettuato l'accesso, l'utente che ha effettuato l'accesso che ha creato una cabina e l'utente disconnesso. Finora, posso solo fare 2 lavori su tre. Ho provato a cambiare

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

a

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

e che non ha funzionato neanche. Sto scrivendo la mia dichiarazione correttamente? Ogni pensiero è apprezzato. Grazie.

risposta

12

Il problema è che la prima condizione è vera, quindi si ferma qui. La vostra prima condizione:

<% if logged_in? %> 

Anche se hanno non una cabina, non potrà mai raggiungere l'elsif perché la prima condizione è vera. Si sia bisogno:

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

o potrebbe essere un approccio più pulito per separarli in due if/else:

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

Grazie per la spiegazione. Ho implementato la prima soluzione e ha funzionato. Per quanto riguarda il pulitore, il primo blocco di codice sarebbe se entrambe le istanze fossero vere, la seconda se fosse solo loggato? erano veri e il terzo blocco per il resto? Grazie ancora. – Kelly

+0

Prego, e questo è vero con il modo in cui hai delineato l'approccio più pulito. – RichardAE