gpt4 book ai didi

ruby-on-rails - Rails 中的 render 和 yield 有什么区别

转载 作者:数据小太阳 更新时间:2023-10-29 06:39:28 28 4
gpt4 key购买 nike

有人可以解释“<%= render %>”和“<%= yield %><% content_for :partial do %>/<% end %>”之间的区别吗?特别是当从一个切换到另一个时路由如何变化,使用一个优于另一个的好处,什么时候使用一个优于另一个。 THIS是我找到的最接近的解释,但对我来说还不够清楚。

几天来我一直在努力解决这个问题,但似乎我尝试的每个配置要么接近,要么出错。

如果有三个 View ,aaabbbccc , 每个都有一个 index.html.erb ,但是bbbccc有一个_content.html.erb部分(由下划线表示)你如何才能完成获得 bbbccc部分在 aaa使用 renderyield

以下作品:

aaa的 index.html.erb :

<div">
<%= render 'bbb/content' %>
</div>

bbb s _content.html/erb :

<p>Content from bbb.</p>  

但这不是:

aaa的 index.html.erb :

<div">
<%= yield :container %>
</div>

bbb s _content.html/erb :

<% content_for :container do %>
<p>Content from bbb.</p> ### viewed in aaa
<% end>

ccc s _content.html.erb 什么都没有,或者 content_for , 但我仍然没有得到 aaa的 index.html 将填充内容。

如果我使用渲染器,我可以明确地放置内容。但我认为使用 yield :whatever 的好处将允许我选择用什么来填充它,并且一旦我将它从渲染更改为产量,我就无法让它填充任何东西。我还必须更新路由文件吗?如果是这样,我如何选择用哪一个来填充它?这是否意味着它在 Controller 中?需要采取行动吗?

虽然这取决于最初路由到哪个文件,但正如我所说,我认为我需要先了解两者之间的区别,然后才能开始使用分音。

最佳答案

首先yield是ruby,render是rails。通常人们对应用程序使用通用布局,其内部内容根据操作/上下文而变化。问题通常在于定义布局的结束位置和上下文特定模板的开始位置。以 HTML title tag 为例.假设您有一个名为 Cities 的应用程序。在大多数情况下,您希望页面标题始终为“城市”。但是,例如,如果您在阿姆斯特丹页面内,那么您希望将“阿姆斯特丹”作为您的页面标题。

# application.html.erb
<html>
<head>
<%= content_for?(:page_title) ? yield(:page_title) : "Cities" %>
......

# city/index.html.erb
<% content_for :page_title do %>
<%= @city.name %>
<% end %>

<div class="bla"...

在 Rails 中,您通常会在应用程序布局中定义应用程序标题。更改页面标题的一种策略是在特定城市模板中使用 content_for 并进行相应更改。

另一方面,Render 完成不同的渲染策略。直的。当您调用渲染时,它会渲染。 content_for/yield 不会自动呈现,它存储在某个地方,然后在适当的地方填充缺失的点。因此,与渲染相比,您可以将其更多地视为“存储/搜索/替换”,后者只是简单的渲染。

最好的经验法则是:如果您正在编写的模板需要根据上下文呈现不同的信息,请强烈考虑使用 content_for。

关于ruby-on-rails - Rails 中的 render 和 yield 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14373057/

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