2013-06-23 7 views
6

Sto provando a inserire alcuni commenti (non renderizzati) in un'istruzione If/Else in una delle mie viste Haml, ma sembra che stia causando problemi.Linee Ruby extra all'interno Se le istruzioni causano problemi in Haml?

Vorrei avere il seguente codice:

- # Stuff like ______ activates the if statement 
- if @condition 
    (Some code) 

- # Stuff like _____ activates the else statement 
- else 
    (Some other code) 

Purtroppo, Rails mi butta questo errore:

Got "else" with no preceding "if" 

Se rimuovo il commento 'altro', vale a dire

- # Stuff like ______ activates the if statement 
- if @condition 
    (Some code) 

- else 
    (Some other code) 

Tutto funziona come previsto. Il problema NON è il commento stesso. Devo cancellare la riga effettiva del codice Ruby (incluso il trattino) per ottenerlo. Cioè, anche se ho solo lasciare una riga vuota preceduta da un trattino, come questo:

- # Stuff like ______ activates the if statement 
- if @condition 
    (Some code) 

- 
- else 
    (Some other code) 

ottengo lo stesso errore. Altri dettagli potenzialmente rilevanti: C'è più codice successivamente che è sullo stesso livello di indentazione dell'istruzione if/else (non al suo interno), e l'intera cosa è annidata all'interno di un modulo. Qualcuno potrebbe spiegarmi cosa sta andando storto? Grazie mille!

P.S. Questa è la mia prima domanda SO, quindi se ho presentato questo in modo inappropriato, per favore fatemelo sapere.

+0

Che cosa succede se si tenta di rientrare più profondo il commento prima della altro? –

risposta

9

Il HAML reference says:

Ruby blocks, like XHTML tags, don’t need to be explicitly closed in Haml. Rather, they’re automatically closed, based on indentation. A block begins whenever the indentation is increased after a Ruby evaluation command. It ends when the indentation decreases (as long as it’s not an else clause or something similar).

Così, quando si riduce il rientro, e che la linea non è un else clausola (o simile, elsif per esempio), le finiture if - un end è aggiunto implicitamente. Poi, naturalmente, la linea non è valida else

La soluzione è quella di rientrare il commento, o prima o dopo la clausola else:

- if @condition 
    - # Stuff like ______ activates the if statement 
    (Some code) 

- else 
    - # Stuff like _____ activates the else statement 
    (Some other code) 
+0

Questo ha perfettamente senso. Grazie mille! –

+0

fantastiche spiegazioni ... lo adoro :)) –