使用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 : '' %>
,但这显然是错误的......任何帮助都会受到赞赏
答案 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}}