2011-10-18 13 views

risposta

43
<% if defined?(:dashboard_pane_counter) && dashboard_pane_counter.remainder(3) == 0 %> 
    # do_something here, this assumes that dashboard_pane_counter is defined, but not nil 
<% end %> 
+10

simbolo non ha funzionato per me. così ho dovuto controllare in questo modo 'se definito? (nome_variabile)' – HungryCoder

+0

grazie .. a volte la risposta più semplice è quella giusta :) – baash05

5

Quando si utilizza rotaie e variabili di istanza, nil ha un metodo try definito, in modo da poter fare:

<% if @dashboard_pane_counter.try(:remainder(3)) == 0 %> 
    #do something 
<% end %> 

quindi se la variabile di istanza non è definita, try(:anything) torneranno a zero e quindi valutare a falsa. E nil == 0 è falso

+1

Ciò causerà comunque un errore se la variabile non è stata definita, quindi non risponde la domanda. – michaeltwofish

+0

No, non lo farà, le rotaie è 'magico costruito nel': '1.9.3p392: 005> @hh => nil 1.9.3p392: 006> @ hh.try (: nulla) => nil' – Yule

+0

Quindi per esempio le variabili, nil ha un metodo 'try' – Yule

-2

invece di

if !var.nil? 

userei

unless var.nil? 

Questo è molto meglio codice Ruby!

+3

questo si applica solo se la variabile è stata definita precedente a questo codice. Prova se! Adallajglaksdkfaj.nil? sulla prima riga di una "funzione". kablammo :) – baash05

3

local_assigns possono essere utilizzati per questo, dal momento che questa domanda è da un paio di anni fa, ho verificato che esiste in versioni precedenti di rotaie

<% if local_assigns[:dashboard_pane_counter] 
       && dashboard_pane_counter.remainder(3) == 0%> 
<% end %> 

E 'nelle note qui

http://apidock.com/rails/ActionController/Base/render