html - 如何在 HAML 中为本地人使用默认值?

标签 html ruby forms haml default-value

我有一个 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 and nil are treated as false. Ruby treats everything else--and I do mean everything--as true.

如果这是一个 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/

相关文章:

javascript - 验证并提交表单,无需刷新页面

jQuery 清除任何类型的输入

ruby-on-rails - 路由错误 : uninitialized constant Sessions

ruby - 你如何在 Ruby 中获得最大 100 个散列值?

ruby-on-rails - 有没有办法在 Windows 机器上运行 Ruby on Rails 应用程序?

javascript - 如何通过 jQuery 获取文本元素的当前值

javascript - 如何修复这个简单的 Accordion ,JavaScript 不工作

javascript - 如何在 JQuery 上显示或隐藏某个特定复选框上的按钮?

javascript - jQuery - 拖放克隆元素

php - Symfony 3 - 将表单定义为服务