2012-10-15 9 views
14

Mögliche Duplizieren definiert:
Checking if a variable is defined in RubyEcho, wenn die Variable in Ruby/erb

Vorlage render Methode

mit Tilt, gehe ich in

#... t setup ... 
t.render(self, { :a => 'test', :b => 'again' }) 

in meinem template.erb

<%= a %> 
<%= b %> 

sagen, ich entferne :b aus dem Hash, die ich an die Vorlage übergeben. Das Rendering wird fehlschlagen, weil :b nicht definiert ist.

in PHP, kann ich gehen:

<?= isset($foo) ? $foo : '' ?> 

gibt es eine saubere Art und Weise (in ruby ​​/ erb) auf "Echo wenn"?

Ich versuchte <%= b.nil? ? b : '' %> aber das ist offensichtlich falsch .. Jede Hilfe

+1

Wird dies helfen? http://stackoverflow.com/questions/288715/checking-if-a-variable-is-defined-in-ruby –

+0

hilfreich, aber ich denke, meine Frage ist spezifisch für erb Vorlage Konventionen – tester

Antwort

23

defined? ist der Rubin entspricht isset() geschätzt würde.

<% defined?(a) ? a : 'some default' %> 
12

Wenn Sie nichts anzuzeigen, wenn a nicht definiert ist:

<%= a if defined?(a) %> 

Auch das, was Sie tun können, festgelegt ist einigen Standard a am Anfang des Teils wenn es nicht definiert. Auf diese Weise können Sie sicher sein, dass a nicht auf Sie stürzt und Sie nicht testen müssen, ob es überall definiert ist. Ich bevorzuge das persönlich.

ACHTUNG: Wenn Sie auf false setzen, wenn Sie es an die Vorlage übergeben, wird es in meinem Beispiel zu "" zugewiesen.

<% a ||= "" %> 
#Then do some things with it. No crash! 
<%= a %> 
<%= a*10 %> 
<%= "Here's the variable a value: #{a}" %> 
+0

'<% = a wenn definiert? Ein%> 'ist großartig! Danke! – tester

+0

'nil?' Wäre nicht sicher, richtig? – tester

+0

Sie können nicht 'a.nil?' Testen, wenn es nicht definiert ist, wird es abstürzen. Verwenden Sie "Definiert?", Um es zu tun. Sie können jedoch 'n 'in meinem zweiten Beispiel oben' a 'zuweisen, solange Sie nur versuchen, es auszugeben. Wenn du Methoden aufrufen willst, stürzt es ab ...! –