我在Rails v2.3应用程序中看到了一些代码.

layout/car_general.html.erb中(该视图由cars_controller中的方法调用),我看到了代码:

<body>
    <%= yield %>

    <%= javascript_include_tag 'jquery-1.4.2.min' %>

    <% javascript_tag do %>
      <%= yield :jstemplates %>
          var some_car = new Object;
      <%= yield :some_car %>
    <% end -%>
</body>

要问两个问题:

  1. Where can I find the yield content of the first <%=yield%> under <body>.
  2. 使用rails在视图中包含js代码是rails特有的方式吗

推荐答案

如果没有任何参数,yield将呈现当前控制器/操作的模板.因此,如果你在cars/show页上,它将呈现views/cars/show.html.erb.

当您传递一个yield参数时,它允许您在模板中定义要在该模板之外呈现的内容.例如,如果您的cars/show页有一个特定的html片段,您希望在页脚中呈现该片段,则可以将以下内容添加到show模板和car_general布局中:

show.html.erb:

<% content_for :footer do %>
  This content will show up in the footer section
<% end %>

layouts/car_general.html.erb

<%= yield :footer %>

《Rails指南》中有一个很好的章节介绍了如何使用http://guides.rubyonrails.org/layouts_and_rendering.html#understanding-yield的yields 和内容

content_for的API文档也很有帮助,还有一些其他的例子.请注意,它适用于Rails 3.1.1,但自2.3版以来,这一功能没有太大变化,如果有,应该仍然适用于3.0.x和3.1.十、

Ruby-on-rails相关问答推荐

DELETE_IF和REJECT的意外行为!方法

Rails 6升级没有加载Mongoid,这是一个问题

在Ruby中按特定值合并时,将两个对象数组添加到一起

如何避免 activesupport 中的循环参数引用警告

Rails 和 jsonb 类型jsonb不存在

Heroku 应用程序上的远程 mysql 数据库

ArgumentError:您需要使用 :if 提供至少一个验证

验证以确保唯一性但忽略空值?

有没有办法在模型而不是视图中使用复数()?

禁用 RVM 或使用没有 RVM 安装的 Ruby?

是否可以在 Rails 中否定范围?

mongoid 中 embeds_many 和 has_many 的区别

Rails Activeadmin - 自定义关联 Select 框

Ruby on Rails 中的MySQL 服务器已经消失

在 Rails 生产中禁用assets资源 缩小

Ruby - 合并两个数组并删除重复的值

使用 PostgreSQL 的模式和 Rails 创建多租户应用程序

:javascript haml 标签中的内联Ruby ?

Rails:一次添加多个 flash[:notice] 的简单方法

如何创建迁移以仅在索引存在时删除索引,而不是在不存在时抛出异常?