Ruby on rails 使用多个收益插入内容

Ruby on rails 使用多个收益插入内容,ruby-on-rails,ruby,ruby-on-rails-4,yield,content-for,Ruby On Rails,Ruby,Ruby On Rails 4,Yield,Content For,我试图用yield在我的页面上插入内容,但每次操作都会删除页面上的全部内容。我有一个主要的yield,运行良好: <body> <%= render 'layouts/header' %> <div class="container"> <%= yield %> <%= render 'layouts/footer' %> </div> </body> 当用户单击

我试图用
yield
在我的页面上插入内容,但每次操作都会删除页面上的全部内容。我有一个主要的
yield
,运行良好:

<body>
    <%= render 'layouts/header' %>
    <div class="container">
      <%= yield %>
      <%= render 'layouts/footer' %>
    </div>
</body>
当用户单击呈现的菜单时,新内容应显示在该菜单下方

admins/_menu.html.erb

<div class="navbar">  
    <div class="navbar-inner">  
        <div class="container">  
            <ul class="nav">
                <li><%= link_to "Users", :controller => "admins", :action => "test" %></li>
                <li><%= link_to "1", ... %></li>
                <li><%= link_to "2", ... %></li>
                <li><%= link_to "3", ... %></li>
            </ul>
        </div>  
    </div>  
</div>  

  • “管理员”,操作=>“测试”%>
控制器:

class AdminsController < ApplicationController

    def index
    end

    def test
        @users = User.paginate(page: params[:page])
    end
end
class AdminsController
test.html.erb

<% content_for :admin do %>

<h1>All users</h1>

...

<% end %>

所有用户
...
当我从菜单中单击“用户”选项时,页面刷新,菜单消失,“正文”中没有显示任何内容。我希望内容显示在菜单下方。如何使用第二个收益率并实现此功能

我希望这个问题不会令人困惑。若问题令人困惑,请给我写评论,我会立即编辑


谢谢:)

因此,当您转到
索引
页面时,您将得到一段html,它将被放置在主布局中,这段html如下所示:

<div class="container">
    <%= render 'admins/menu' %>
    <%= yield :admin %>
</div>
<% content_for :content do %>
  <div class="container">
    <%= render 'admins/menu' %>
    <%= yield %>
  </div>
<% end %>
<%= render template: "layouts/application" %>
而不是

<%= yield %>

好的。然后在
index.html.erb
test.html.erb
中,只放置常规html内容,而不使用(:admin)
块的
内容。一切正常,您将拥有自定义的管理模板,外观与常规页面略有不同。

调用
yield
在助手模块中不起作用,而
content\u for
起作用,因此您应该替换助手文件中的
yield
调用


同样值得注意的是:当您仅在一个位置而不是多个位置使用该方法时,建议使用
provide
而不是
content\u。您将获得更好的性能,因为它不会在寻找更多内容时让缓冲区保持打开状态,并且您的意图对于其他可能看到您的代码的开发人员来说会更清楚。(请参阅)

我发现必须在名称空间标记之前添加一个
yield
(不实际输出)


标题
...

代码放在哪个文件中?
只是一种预感,但您是否尝试过查看/admins/index.html中的
?@marzapower-而不是
。erb@CDub-我试过了,但还是一样。谢谢,但我现在如何访问admins.html.erb文件?我在主页上有一个链接
  • ,在路径中有:通过“get”将“/admin_dashboard”匹配到“admins#index”。对于
    AdminsController
    的每个方法,将自动加载
    admins.html.erb
    文件(放置在应用程序主布局附近的
    layouts
    文件夹中)。将其视为
    application.html.erb
    布局的扩展。它可以工作并自动加载,但问题是admins.html.erb完全删除了所有内容,现在我只有一个完全空白的页面,上面只有菜单,没有任何样式。您是否按照要求修改了应用程序布局?您应该只替换
    行,而不是整个文件!谢谢,现在可以用了!我最近刚开始学习Rails,所以对我来说有点困惑。你挽救了这一天:)谢谢你的解释:)
    <%= yield %>
    
    <% content_for :content do %>
      <div class="container">
        <%= render 'admins/menu' %>
        <%= yield %>
      </div>
    <% end %>
    <%= render template: "layouts/application" %>