重複の可能性:
変数が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 : '' %>
を試しましたが、明らかに間違っています。助けていただければ幸いです。
_defined?
_はRuby isset()
と同等です。
_<% defined?(a) ? a : 'some default' %>
_
a
が定義されていない場合に何も表示したくない場合:
<%= a if defined?(a) %>
また、パーシャルが定義されていない場合は、パーシャルの先頭でデフォルトをa
に設定することもできます。このようにして、a
がクラッシュすることはなく、どこでも定義されているかどうかをテストする必要がないことが保証されます。私は個人的にこの方法を好みます。
注意:テンプレートに渡すときにa
をfalse
に設定すると、私の例では""
に再割り当てされます。
<% a ||= "" %>
#Then do some things with it. No crash!
<%= a %>
<%= a*10 %>
<%= "Here's the variable a value: #{a}" %>