我的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 %>
答案 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 %>