Ruby on rails HAML:仅当条件为true时创建容器/包装器元素

Ruby on rails HAML:仅当条件为true时创建容器/包装器元素,ruby-on-rails,haml,Ruby On Rails,Haml,Longshot,但我想知道是否有任何方法可以这样做: %p # ONLY SHOW THIS IF LOCAL VARIABLE show_paras IS TRUE = name = show_paras ? content_tag(:p, name) : name 换句话说,它总是显示里面的内容,但只有当(某些条件)为真时,它才会在其周围包装一个容器。您可以使用原始html,但在开头和结尾都必须有if语句: - if show_paras <p> = name -

Longshot,但我想知道是否有任何方法可以这样做:

%p # ONLY SHOW THIS IF LOCAL VARIABLE show_paras IS TRUE
  = name
= show_paras ? content_tag(:p, name) : name

换句话说,它总是显示里面的内容,但只有当(某些条件)为真时,它才会在其周围包装一个容器。

您可以使用原始html,但在开头和结尾都必须有if语句:

- if show_paras
  <p>
= name
- if show_paras
  </p>
您也可以使用HAML的
环绕声
(虽然这有点凌乱):


我能想到的最干净的方法是:

%p # ONLY SHOW THIS IF LOCAL VARIABLE show_paras IS TRUE
  = name
= show_paras ? content_tag(:p, name) : name
但这不完全是哈姆


通常,标记是内容的首选标记,因此,如果show_paras是一个更具代表性的调整,您可能应该使用css来更改%p的行为,而不是另一个选项是,如果不满足条件,则使用
haml_标记将其包装在替代标记中:

- haml_tag(show_paras ? :p : :div) do
  = name

谢谢,环绕声是我一直在寻找的东西。正如你所说的,有点混乱,但是你可以通过在环绕声上构建一个辅助功能使它非常干净。谢谢是的,我接受你的观点,但在我的例子中,它有点复杂,因为里面有条件内容,在某些情况下可能会成为段落(或节等),但在其他情况下,只是一个简单的div/span。这是旧的haml_tag_if!美好的
- haml_tag(show_paras ? :p : :div) do
  = name
- haml_tag_if show_paras, :p do
  = name