新手问题 谁给解析下这里 yield 的用法

scuwolf · 2013年08月02日 · 最后由 nightire 回复于 2013年08月02日 · 4687 次阅读

谁给解析下下面代码里面两个 yield 的原理


# home.html.erb
<% provide(:title, 'Home') %>
<h1>Sample App</h1>
<p> 
This is the home page for the
<a href="http://railstutorial.org/">Ruby on Rails Tutorial</a>
sample application.
</p>
# application_helper.rb

module ApplicationHelper
  def  full_title(page_title)
    base_title = "Ruby on Rails Tutorial Sample App"
    page_title.empty? ? base_title : "#{base_title} | #{page_title}"
  end
end
# application.html.erb     

<head>
  <title><%= full_title(yield(:title)) %></title>
  <%= stylesheet_link_tag    "application", :media => "all" %>
  <%= javascript_include_tag "application" %>
  <%= csrf_meta_tags %>
</head>
<body>

<%= yield %>

</body>
</html>

就是把 home.html.erb 内容放到 application.html.erb 里面

你看一下 API 里的 #content_for 方法的解释吧:http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-content_for

这个会帮助你理解怎么用 yield 以及怎么给 yield 提供值。而你可能会疑惑的是:在你给出的例子里没有用 #content_for,而是用的 #provide 方法?对于此,你继续从我给的地址往下看,紧接着就会介绍这两个方法的异同。

如果我没记错,你给的例子应该是出自 Rails Tutorial,我记得原书里解释过这个呀,没好好看吧?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号