新手问题,这里的“收益”意味着什么?

时间:2011-03-09 08:59:10

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

我在View / car.html.haml中看到了某人的代码,如followows:

%body
  =yield

有人能解释一下这里使用“=产量”吗?

- 我在哪里可以找到实际的身体部位代码?

- 这意味着什么,

- 为什么要使用它或在什么情况下我们应该使用它?

3 个答案:

答案 0 :(得分:4)

通常,这将出现在布局文件中(默认情况下为views / layouts / application.html.haml)。它只是告诉Rails在那个位置呈现当前操作的内容。

因此,如果您的视图/ layouts / application.html.haml包含:

%body
  =yield

你的观点/帖子/ index.html.haml包含:

%h1 This is the posts index page!  :D

然后,当您转到呈现帖子索引页面(可能是/ posts)的操作时,您将看到在布局文件中yield位置呈现该标题的html:

<body>
  <h1>This is the posts index page! :D</h1>
</body>

这对于包含常见页面导航标记或应显示在所有页面上的标题非常有用,而无需在每个视图中重新定义确切的html。

如果您的网站的单独部分有不同的布局,您可以在控制器中呈现您的视图,如下所示:

def index
  if signed_in?
    render :layout => 'application'
  else
    render 'user/unauthorized', :layout => 'external' and return
  end
end

将使用指定的视图,在布局的yield出现的任何位置呈现在指定的布局中。在语句的其他地方user/unauthorized.html.haml将在layouts/external.html.haml布局和signed_in中呈现?如果您要在posts/index.html.haml布局中呈现layouts/application.html.haml视图。

答案 1 :(得分:1)

http://api.rubyonrails.org/classes/ActionView/Partials.html

上面的文章将解释它的意思,语法不一样,因为文档是在erb中,而你正在处理haml。实际的正文代码最有可能出现在_body.html.haml partial。

答案 2 :(得分:0)

这个上面定义的函数实际上是一个生成器函数,我们在其中正常定义函数但是使用yield语句而不是return,向解释器指示该函数应该被视为迭代器。

yield语句暂停函数并保存本地状态,以便可以从中断状态恢复它。

当我们调用此函数时,它会为我们提供输出

val = countdown(5)
>>> val
<generator object countdown at 0x10213aee8>

该函数实际上返回了一个生成器对象。因此,生成器函数以下面提到的方式以不同的方式调用:

生成器对象在调用next()时执行。

>>> next(val)
Starting
5