2012-10-15 13 views
14

Powiel możliwe:
Checking if a variable is defined in Rubyecho jeśli zmienna jest zdefiniowana w Ruby/erb

użyciu szablonu render metodę Tilt, mijam w

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

w moim template.erb

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

Powiedz, że usuwam :b z hasha, które przekazuję do szablonu. Renderowanie się nie powiedzie, ponieważ :b jest niezdefiniowane.

w PHP, mogę iść:

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

jest jakiś czysty sposób (w Ruby/ERB) do "echo jeśli"?

Próbowałem <%= b.nil? ? b : '' %> ale to oczywiście źle .. Każda pomoc będzie mile widziane

+1

Czy to pomoże? http://stackoverflow.com/questions/288715/checking-if-a-variable-is-defined-in-ruby –

+0

pomocne, ale myślę, że moje pytanie jest specyficzne dla szablonów erb konwencji – tester

Odpowiedz

23

defined? jest ruby ​​równoważne isset().

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

Jeśli chcesz zobaczyć nic, jeśli a nie jest zdefiniowana:

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

Również to, co można zrobić, to ustawić kilka domyślnych do a na początku swoją częściowe jeśli nie jest zdefiniowana. W ten sposób masz pewność, że a nie zawiedzie Cię i nie musisz sprawdzać, czy jest on zdefiniowany wszędzie. Wolę tę drogę osobiście.

UWAGA: jeśli ustawisz a na false po przesłaniu go do szablonu, zostanie on ponownie przypisany do "" w moim przykładzie.

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

'<% = a jeśli zdefiniowane? %> 'jest świetne! Dziękuję Ci! – tester

+0

"zero" nie byłoby bezpieczne, prawda? – tester

+0

nie możesz przetestować 'a.nil?' Jeśli nie jest zdefiniowany, to się zawiesi. Użyj 'defined?', Aby to zrobić. Możesz jednak przypisać 'nil' do' a' w moim drugim przykładzie powyżej, o ile tylko spróbujesz go wyprowadzić. Jeśli jednak chcesz wywołać metody, to się zawiesi ...! –

Powiązane problemy