我有一个 HAML 模板,我想渲染它并选择性地向其提供一个局部变量,这里称为 post,以便它使用提供的变量作为元素属性的值,或者回退到显式默认值。
下面的代码显示了我的意思,但是如果没有提供 post
它就无法运行。有没有一个干净的解决方案?我有很多这样的字段,我宁愿不必用 - if defined?
语句重复它们,这是我能想到的唯一其他选择。
%label
Post title
%input{:name => "title",
:value => (defined? post) ? post.title : ""} }
最佳答案
尝试这样做:
%input{:name => "title", :value => post ? post.title : ""}
您不需要使用 defined 检查,因为 nil
在 Ruby 解释器中被视为 false。此节选自Eloquent Ruby by Russ Olsen最好的描述:
In Ruby, only
false
andnil
are treated asfalse
. Ruby treats everything else--and I do mean everything--astrue
.
如果这是一个 Rails 应用程序,一个更有说服力的解决方案是使用 Rails try
方法:
%input{:name => "title", :value => post.try(:title)}
try
方法调用由传入类的符号标识的方法,除非类本身是 nil
,在这种情况下它将返回 nil
(haml 会自动将其转换为空白字符串)。 Read more about the rails try method here .
关于html - 如何在 HAML 中为本地人使用默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8662876/