【问题标题】:echo if variable is defined in ruby/erb [duplicate]如果在 ruby​​/erb 中定义了变量,则回显 [重复]
【发布时间】:2012-10-15 23:31:07
【问题描述】:

可能重复:
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 中)来“回显 if”?

我试过 &lt;%= b.nil? ? b : '' %&gt; 但这显然是错误的。任何帮助将不胜感激

【问题讨论】:

标签: ruby erb


【解决方案1】:

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

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

【讨论】:

  • 我相信这需要&lt;%=开头;在开始回显时缺少等号。
【解决方案2】:

如果你不想在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}" %>

【讨论】:

  • &lt;%= a if defined? a %&gt; 太棒了!谢谢!
  • nil? 不安全,对吗?
  • 你不能测试a.nil?,如果它没有被定义,它会崩溃。使用defined? 来做到这一点。但是,您可以在上面的第二个示例中将nil 分配给a,只要您尝试输出它即可。如果你想调用它的方法,它会崩溃......!
  • 我还建议大量使用irb 来进行实验,看看你能用这种语言做什么,不能做什么。它是每个 ruby​​ist 都使用的强大工具,即使是有经验的人!
猜你喜欢
  • 2018-06-26
  • 2016-11-04
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多