15

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

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

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

在我的template.erb

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

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

在 PHP 中,我可以去:

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

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

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

4

2 回答 2

28

defined?是 ruby​​ 等价于isset().

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

如果您想在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}" %>
于 2012-10-15T23:41:15.987 回答