标签: content-for

Ruby on Rails:提供vs content_for

今天我遇到了视图助手功能"提供".通过查看其手册,我仍然对它与"content_for"的区别感到困惑.

提供(name,content = nil,&block)

与content_for相同,但与流式传输一起使用时直接返回布局.换句话说,如果要在呈现给定模板时多次连接到同一缓冲区,则应使用content_for,否则,使用provide来告诉布局停止查找更多内容.

问题1:这对我来说非常抽象 - 任何人都可以通过给出一个示范性的例子来充实它吗?

问题2:使用资产管道,性能更好,为什么?

谢谢!

ruby ruby-on-rails content-for asset-pipeline

27
推荐指数
2
解决办法
5727
查看次数

除了某个动作之外,如何渲染部分内容

我有一个_header.html.erb部分,这是我放置导航栏的地方

在我的启动页面上,我不想显示导航栏.

这是bodyapplication.html.erb

<body>
<%= render 'layouts/header' %>
<div id="container">
    <%= yield %>
</div>

</body>
Run Code Online (Sandbox Code Playgroud)

如何在除特定控制器上的特定操作之外的每个操作上呈现它?

render partial content-for ruby-on-rails-3

26
推荐指数
2
解决办法
1万
查看次数

在rails中使用content_for包含内联javascript

我正在使用content_for和yeild将javascript文件注入我的布局底部,但我想知道包含内联javascript的最佳做法是什么.具体来说我想知道把脚本类型声明放在哪里:

<% content_for :javascript do %> 
  <script type="text/javascript"> ... </script>
<% end %>
Run Code Online (Sandbox Code Playgroud)

要么

<% content_for :javascript do %> ... <% end %>
  <script type="text/javascript">
    <%= yield :javascript %>
  </script>
<% end %>
Run Code Online (Sandbox Code Playgroud)

我现在正在使用第一个选项,并想知道包含多个是否不好

...

一个视图中的声明.有时我会偏袒这一点.

javascript ruby-on-rails content-for

18
推荐指数
1
解决办法
3万
查看次数

rails部分的布局与命名的yield - 为什么yield块从未使用过?

我有一个部分,有一个布局:

<%= render :partial => 'home/mobile/home', :layout => 'home/mobile/page', :locals => {:page => 'abc2'}%>
Run Code Online (Sandbox Code Playgroud)

布局(page.html.erb)具有不同块的产量,例如:

<div data-role="header">
  <%= yield :header %>
</div>
Run Code Online (Sandbox Code Playgroud)

但是,从不使用此yield块,而主级布局文件确实产生了预期的效果.

使用部分布局的命名content_for/yield块是不是不可能?有变通方法吗?

我希望继承 - content_for:header应首先在partial的布局中查找yield:标头,并且失败,即主布局文件.但这种情况并非如此.部分布局的yield:标头被简单地忽略.

layout ruby-on-rails partials content-for

12
推荐指数
2
解决办法
1751
查看次数

在同一页面上有多个content_for

我在我的应用程序中有大块的HTML,我想进入共享模板,然后使用content_for和yield来插入必要的内容.但是,如果我在同一个布局文件中多次使用它,则content_for只会附加到之前的那个想法不能很好地工作.这个问题有方法解决吗?

<div class="block side">
    <div class="block_head">
        <div class="bheadl"></div>
        <div class="bheadr"></div>
        <h2><%= yield :block_head %></h2>
    </div>
    <div class="block_content">
        <%= yield :block_content %>
    </div>
    <div class="bendl"></div>
    <div class="bendr"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

我使用以下代码设置块的内容

    <%= overwrite_content_for :block_head do -%>
        My Block
    <% end -%>
    <%= overwrite_content_for :block_content do -%>
        <p>My Block Content</p>
    <% end -%>
    <%= render :file => "shared/_blockside" %>
Run Code Online (Sandbox Code Playgroud)

问题是如果我在同一布局上多次使用它,原始块中的内容将附加到辅助块

我已经尝试创建一个自定义帮助方法来解决它,但它不会返回任何内容

  def overwrite_content_for(name, content = nil, &block)
    @_content_for[name] = ""
    content_for(name, content &block)
  end
Run Code Online (Sandbox Code Playgroud)

我可能也会对此完全错误,如果有更好的方法可以让内容像我一样工作,我想知道.谢谢.

yield content-for ruby-on-rails-3

8
推荐指数
2
解决办法
4987
查看次数

HAML在使用content_for时有多行,用于JavaScript

我试图在页面上输出一些内联js.我真的不想将它添加到任何JS文件,因为它是如此aribtrary和一次使用.话虽这么说,我正在使用haml并尝试使用content_for,以便在从布局加载jquery之后放置JS.

问题是haml不喜欢缩进的多行文本(我认为)

我正在尝试执行以下操作:

=content_for :javascript do
  $(function(){
    $("#sell_tickets_here").live("vclick",function(){
      if($(this).is("checked"))
        $("#tickets_here").display("inline");
      else
        $("#tickets_here").display("none");
    });
  });
Run Code Online (Sandbox Code Playgroud)

在我的布局中,我有:

  = yield(:javascript)
Run Code Online (Sandbox Code Playgroud)

如果我在content_for语句后只有1行,那么哪个实际有效.

javascript haml ruby-on-rails content-for

8
推荐指数
1
解决办法
8283
查看次数

如何使用content_for以便内容显示在布局中

我正在测试我的rails 3.2应用程序中的content_for并遵循rails指南,但它们是特定于实际文件的,我似乎无法获得收益:

application.html.erb文件:

 <!DOCTYPE html>
 <html>
<head>
 ...
</head>

<body>




<%= yield :navigation %> #shouldn't this load the content_for block named :navigation specified in the _main_nav.html.erb partial? 

 <%= yield %>  #this load the index page content


</body>
 </html>
Run Code Online (Sandbox Code Playgroud)

我创建了一个布局文件_main_nav.html.erb(我知道我可以使用<%= render'layouts/header'%>进行渲染,但我尝试使用content_for)_main_nav.html.erb是:

<% content_for :navigation do %>
<ul>
 <li>Home</li>
 </ul>

<% end %>
Run Code Online (Sandbox Code Playgroud)

他们以 这种方式阅读了RailsGuide http://guides.rubyonrails.org/layouts_and_rendering.html#using-the-content-for-method这应该有用.但事实并非如此.我没有收到错误.看似简单,但我很难过.

当我转到我的index.html.erb文件时,我希望看到这个结果:

content-for ruby-on-rails-3

7
推荐指数
2
解决办法
1万
查看次数

Ruby on Rails 的 content_for 会自动进行 HTML 转义吗?

使用 Rails 3.0.6,我发现在视图中,如果我执行

content_for :food_name, "Macaroni & Cheese"
Run Code Online (Sandbox Code Playgroud)

然后,当我使用 取回它时content_for(:food_name),就会已经将其&制成&amp;。即使我做了 a 也没关系content_for(:food_name).html_safe,它&仍然已经制成了&amp;

但如果按照以下方式完成,则不会转义:

content_for :food_name, "Macaroni & Cheese".html_safe
Run Code Online (Sandbox Code Playgroud)

在这种情况下,&不会&amp;自动更改为。现在,因为有些地方我实际上做了 a#{h content_for(:food_name)}并且它将被转义两次(成为&amp;amp;),或者 因为我在描述中有值,所以调用某些值而不调用其他值<meta>会很奇怪h

另外,一个大问题是,如果它自动转义,如果我添加" - come see us!"到它的末尾,并依靠 Rails 3 来转义它,那么现在, the&被转义了两次

在文档中content_for

http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-content_for

我没有看到任何这样的描述。那么上面的描述是正确的还是文档更正确——事实上没有自动 HTML 转义?

从上面网页的源代码来看,似乎content_for调用了capture,并且执行了ERB::Util.html_escape,所以实际上存在自动转义,但真的应该存在吗?为什么?是否也没有记录capture 自动转义?

ruby-on-rails content-for ruby-on-rails-3

6
推荐指数
1
解决办法
2473
查看次数

传递参数以在Rails 3中产生(或者可能吗?)

我正在尝试使用yield和创建动态内容content_for.基本上我有一堆布局.我不想为每个布局创建一堆视图.我想在需要时渲染视图部件.对于代码的不同部分,它是可以的.但我有相同的部分与不同的内容有问题.

在我的 application.html.erb

<%= yield %>
<%= yield :name_section %>
Run Code Online (Sandbox Code Playgroud)

在我的show.html.erb拥有;

<% content_for :name_section do %>
    <b>Name:</b>
    <%= @post.name %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这是个问题;

如果我想要多个具有不同内容的name_section,该怎么办?我的意思是; 我想:name_section在不同的内容中放置不同的地方.

对于前

<table>
  <tr>
    <td>
      <%= yield :name_section %>
    </td>
  </tr>
  <tr>
    <td>
      <%= yield :name_section %>
    </td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

谢谢.Çağdaş

yield erb content-for ruby-on-rails-3

6
推荐指数
2
解决办法
5641
查看次数

Rails Content_for/yield的问题 - 重复的内容

我正在尝试使用命名的yield块在我的应用程序页面中加载一些javascript,但代码是重复的,因为加载我的视图页面的通用yield.类似的东西:

-----代码出现在观点-----

<% content_for :bottom_scripts do %>
    <script type="text/javascript">
             Some Javascripts
    </script>
<% end %>
Run Code Online (Sandbox Code Playgroud)

------我的申请页面中的代码-----

<div id = "body">
    <%= yield %>
</div>
<%= yield :bottom_scripts %>
Run Code Online (Sandbox Code Playgroud)

脚本代码打印两次,但我需要它只是在第二次打印,任何想法?

ruby yield ruby-on-rails content-for

5
推荐指数
1
解决办法
1071
查看次数