gpt4 book ai didi

ruby-on-rails - 附加到 content_tag 中的 yield

转载 作者:数据小太阳 更新时间:2023-10-29 08:26:37 24 4
gpt4 key购买 nike

假设我在 application_helper.rb

中有这个助手
def my_helper(content = nil, *args, &block)
content_tag(:div, class: :my_wrapper) do
(block_given? ? yield : content) + content_tag(:span, "this is the end", *args)
end
end

我从 View 中调用它

my_helper do 
content_tag(:div, "this is the beginning")
end

我希望结果是这样的

<div class="my_wrapper">
<div>
this it the beginning
</div>
<span>
this is the end
</span>
</div>

但实际上,带有文本“this is the end”的 span 不会附加到 yield 中。

如果我在助手中使用这一行:

(block_given? ? content_tag(:div, &block) : content) + content_tag(:span, "this is the end", *args)

我会同时获得这两个内容,但 yield 会被包装在另一个 div 中。

如何在 yield 之后添加/追加内容,而不将 yield 包装在不同的 content_tag 中?

最佳答案

您可以使用 capture实现这一目标:

def my_helper(content = nil, *args, &block)
content_tag(:div, class: :my_wrapper) do
(block_given? ? capture(&block) : content) + content_tag(:span, "this is the end", *args)
end
end

并确保在您看来这样做:

<%= my_helper do %>
<%= content_tag(:div, "this is the beginning") %>
<%- end %>

关于ruby-on-rails - 附加到 content_tag 中的 yield,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32985379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com