我在想,在我偏爱的顶端,我会有类似的东西
<% optional_width = default_value unless (defined? optional_width)
但是我的结果不一致,我认为这不是一个很好的方法。在rails中执行此操作的“正确”方法是什么?
答案 0 :(得分:23)
基本上它说你应该使用这种模式:
<% if local_assigns.has_key? :headline %>
Headline: <%= headline %>
<% end %>
对你而言,这可能会转化为:
<div style="width: <%= local_assigns.has_key?(:optional_width) ? optional_width : 500 %>px;">
<!-- filler -->
</div>
根据文档
使用
defined? headline
进行测试无效。这是一个实施限制。
答案 1 :(得分:3)
虽然不完全等同于您的代码,但通常使用||
运算符完成。
<% optional_width ||= default_value %>
这相当于optional_width = optional_width || default_value
。由于shot-circuit evaluation,如果optional_with
为“true”,即它已定义,而不是nil
,则右侧部分与之相等,default_value
不均匀计算。否则,右手部分将等于default_value
。这基本上就是你想要做的。
好的,我承认它可能对部分本地人不起作用。我可以想象的特殊情况是,如果在第一次渲染调用中optional_width
变量被设置为某个值,并且随后调用render
,则在保持其第一个值时根本没有提到它跑。但是现在不能做这样的检查。