当变量是可选的时,rails部分中的可选换行符

时间:2015-01-25 08:35:46

标签: ruby-on-rails

我有一些像我这样的轨道部分:

<%= content_tag_for(:div, child) do %>
    <%= child.var1 %><br>
    <%= child.var2 unless child.var2.blank? %><br>
    <%= "Some string" if child.is_stringy? %>
<% end %>

如下所示:

<%= render @object.children %>

如何使第二个和第三个换行符是可选的,而不必将整个块包裹在if / unless-then-end周围,如下所示:

<%= content_tag_for(:div, child) do %>
    <%= child.var1 %><br>
    <% unless child.var2.blank? then %>
      <%= child.var2 %><br>
    <% end %>
    <% if child.is_stringy? then %>
      <%= "Some string" if child.is_stringy? %><br>
    <% end %>
<% end %>

我非常喜欢使用if / unless内联,以简洁明了。我可以这样做:

<%= child.var2 + tag(:br) unless child.var2.blank? %>

但是我必须修复转义标记,如下所示:

<%= raw(child.var2 + tag(:br)) unless child.var2.blank? %>

哪个有效,但让我对通过var2允许任意HTML感到有些不安。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果您经常这样做,您可以随时定义一个视图助手。像这样:

def break_after(value)
  return unless value.present?
  capture do
    concat value
    concat tag(:br)
  end
end

然后......

<%= break_after child.var1 %>