在Rails中的HAML中编写if-else

2 haml ruby-on-rails ruby-on-rails-3.2

对不起,如果这是一个初学者的问题,只是我使用HAML的第一天仍然不习惯.

所以我在HAML中有这个:

%td= number_to_percentage(thera.group_dispense_rate, precision: 0)
Run Code Online (Sandbox Code Playgroud)

我想更新它说,如果thera.group_dispense_ratenil则改用thera.provider_dispense_rate

所以我只需要一些帮助来更新这个HAML逻辑.

MrY*_*iji 7

只需使用双管(OR运算符)*:

number_to_percentage(thera.group_dispense_rate || thera.provider_dispense_rate, precision: 0)
Run Code Online (Sandbox Code Playgroud)

双管(OR运算符)*在起作用:

1.9.3p448 :090 > nil || "Bonjour Cartman"
# => "Bonjour Cartman" 
Run Code Online (Sandbox Code Playgroud)

注意:双管适用于 nilfalse,但不适用于空的东西(数组,字符串,哈希)而不适用于零(整数).


HAML的较长版本:

%td
  - if thera.group_dispense_rate.present?
    = number_to_percentage(thera.group_dispense_rate, precision: 0)
  - else
    = number_to_percentage(thera.provider_dispence_rate, precision: 0)
Run Code Online (Sandbox Code Playgroud)

*(OR运算符)=布尔OR,感谢@meagar

  • 不,不,第二个是在这里回答你的确切问题"*需要一些帮助来更新这个HAML逻辑*",第二个选项你可以添加更多的验证,比如`.present?`AND`> 0`.第一个只适用于`nil`和`false`,不适用于空/零 (2认同)
  • 你应该用它的实际名称"boolean OR"来代替"双管道".这是"或运营商".不是"双管". (2认同)