15

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

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

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

私の中でtemplate.erb

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

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

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

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

「echoif」を(ruby / erbで)クリーンな方法はありますか?

私は試し<%= b.nil? ? b : '' %>ましたが、それは明らかに間違っています..どんな助けもいただければ幸いです

4

2 に答える 2

28

defined?に相当するルビですisset()

<%= defined?(a) ? a : 'some default' %>
于 2012-10-15T23:37:49.487 に答える
13

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}" %>
于 2012-10-15T23:41:15.987 に答える