gpt4 book ai didi

ruby-on-rails - block 给定?在 erb 模板中总是返回 true

转载 作者:行者123 更新时间:2023-12-04 03:51:16 25 4
gpt4 key购买 nike

在 Rails 5.2.3 中,我需要渲染一个带有可选块的部分。

# users/_user.html.erb
...
<% if block_given? %>
<%= yield %>
<% else %>
<h1>Goodbye world</h1>
<% end %>
...


然而 block_given?无论我选择使用哪个版本,都返回 true:

<%# Version 1 - block_given? returns true %>
<%= render partial: "users/_user" do %>
<h1>hello world</h1>
<% end %>

<%# Version 2 - block_given? also returns true %>
<%= render partial: "users/_user" %>


这里发生了什么,为什么会这样?

最佳答案

因为所有的 Rails 模板都支持 content_for :xyz , 由 yield :xyz 触发,这意味着所有模板总是被包裹在一个准备好获取这个 content_for 的块中。数据。

因为这个预编程的块总是在那里,为了容纳content_for , 意思是 block_given?将始终返回 true。

我认为这实际上可能是 Rails View 设计中的一个小疏忽。如果我们有一个单独的方法来检测是否为部分提供了一个块,那就太好了。

解决方法的一个想法:

<% if (block = yield).empty? %>
<h1>Goodbye world</h1>
<% else %>
<%= block %>
<% end %>

关于ruby-on-rails - block 给定?在 erb 模板中总是返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58511033/

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