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

时间:2012-10-15 23:31:08

标签: ruby erb

  

可能重复:
  Checking if a variable is defined in Ruby

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

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

template.erb

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

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

在PHP中,我可以去:

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

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

我试过了<%= b.nil? ? b : '' %>,但这显然是错误的......任何帮助都会受到赞赏

2 个答案:

答案 0 :(得分:25)

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

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

答案 1 :(得分: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}" %>

{{1}}