web-dev-qa-db-ja.com

変数がRuby / erbで定義されている場合はエコー

重複の可能性:
変数がRubyで定義されているかどうかを確認する

tiltのテンプレートrenderメソッドを使用して、渡します

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

私のtemplate.erb

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

テンプレートに渡すハッシュから:bを削除するとします。 :bが定義されていないため、レンダリングは失敗します。

pHPでは、次のことができます。

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

(Ruby/erbで)「echoif」するためのクリーンな方法はありますか?

<%= b.nil? ? b : '' %>を試しましたが、明らかに間違っています。助けていただければ幸いです。

15
tester

_defined?_はRuby isset()と同等です。

_<% defined?(a) ? a : 'some default' %>
_
25
Alex Wayne

aが定義されていない場合に何も表示したくない場合:

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

また、パーシャルが定義されていない場合は、パーシャルの先頭でデフォルトをaに設定することもできます。このようにして、aがクラッシュすることはなく、どこでも定義されているかどうかをテストする必要がないことが保証されます。私は個人的にこの方法を好みます。

注意:テンプレートに渡すときにafalseに設定すると、私の例では""に再割り当てされます。

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