在ERB中添加条件块

时间:2016-02-05 19:55:54

标签: ruby ruby-on-rails-3 erb

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

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

本质上会检查视图是否包含layoutBlock的内容,如果是,则让它运行,否则它将为layoutBlock执行自己的内容。

有没有办法定义一些可以简化它的别名:

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

1 个答案:

答案 0 :(得分:4)

我希望像这样的帮手可以正常工作

# 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 %>