如果变量在ruby/erb中定义,则回显

tes*_*ter 15 ruby erb

可能重复:
检查Ruby中是否定义了变量

使用Tilt的模板render方法,我传入

#... t setup ...
t.render(self, { :a => 'test', :b => 'again' })
Run Code Online (Sandbox Code Playgroud)

在我的 template.erb

<%= a %>
<%= b %>
Run Code Online (Sandbox Code Playgroud)

说我:b从传递给模板的哈希中删除.渲染将失败,因为:b未定义.

在PHP中,我可以去:

<?= isset($foo) ? $foo : '' ?>
Run Code Online (Sandbox Code Playgroud)

是否有任何干净的方式(在ruby/erb中)"echo if"?

我试过,<%= b.nil? ? b : '' %>但这显然是错误的..任何帮助将不胜感激

Ale*_*yne 26

defined?是红宝石相当于isset().

<% defined?(a) ? a : 'some default' %>
Run Code Online (Sandbox Code Playgroud)


Ant*_*rto 13

如果a未定义则不显示任何内容:

<%= a if defined?(a) %>
Run Code Online (Sandbox Code Playgroud)

a如果没有定义,你可以做的是在partial的开头设置一些默认值.通过这种方式,您可以放心,a不会崩溃,您无需测试是否在任何地方定义.我个人更喜欢这种方式.

注意:如果设置afalse将模板传递给模板,则会""在我的示例中重新分配.

<% a ||= "" %>
#Then do some things with it. No crash!
<%= a %>
<%= a*10 %>
<%= "Here's the variable a value: #{a}" %>
Run Code Online (Sandbox Code Playgroud)