在 ERB 中添加条件块

Adding a conditional block in ERB

我的 ERB 布局中有以下内容:

<%# Check for block -%>
<% if content_for?(:layoutBlock) %>
    <%# If so, yield to it -%>
    <%= yield :layoutBlock %>
<%# Otherwise... -%>
<% else %>
    <%# Do stuff -%>
<% end %>

本质上是检查视图是否包含 layoutBlock 的内容,如果是,则让它 运行,否则它将执行自己的 layoutBlock.[=14 的内容=]

有没有办法定义一些别名,将其简化为:

<% optionalYield :layoutBlock %>
    <%# Do stuff -%>
<% end %>

我希望像这样的助手能工作

# in a helper
def optional_block(block_name, &block)
  concat(content_for(block_name).presence || capture(&block))
end

可以在这样的视图中使用:

<% optional_block(:layoutBlock) %>
  # Content that is only rendered when content_for(:layoutBlock) is blank
<% end %>