yield:content不显示content_for:content

时间:2015-08-14 02:12:24

标签: ruby ruby-on-rails-4 yield content-for

我认为我有同样的问题。 Using multiple yields to insert content

我尝试了解决方案。我试着在我的application.html.erb中有<%= yield :content %>,并且在我的视图中有content_for :contentyield。但它不适用于我的应用程序。你能解释一下我的问题吗?或者给出示例情景吗?

里面的链接,不能重新加载,所以我不会在我将显示的每个模板上使用render partial。

我刚刚开始学习Rails,所以这对我来说有点混乱。谢谢。

enter image description here

我试过这个;这只是一个例子我稍后会修复侧边栏的连接。

在我的applicaion.html.erb

<!DOCTYPE html>
<html>
<head>
  <title>Clinks</title>
  <%= stylesheet_link_tag    "application", media: "all" %>
  <%= javascript_include_tag "application" %>
  <%= csrf_meta_tags %>
</head>

<body>
    <section id="container" >
        <%= render 'layouts/header' %>
        <%= render 'layouts/sidebar' %>
        <section id="main-content">
            <section class="wrapper">
                <div class="row">
                    <!-- %= yield % -->
                    <%=yield(:content) %>
                </div><!--/row -->
            </section><!--/wrapper -->
        </section><!--/main-content -->
    </section><!--/container -->
</body>
</html>

layouts文件夹内的menu_tables.html.erb中。

<% content_for(:content) do %>
    <%= render 'menu_tables/sidemenu' %>
    <%= yield %>
<% end %>
<%= render template: "layouts/application" %>

在我的routes.rb

Rails.application.routes.draw do
  root :to => 'pages#home'
  resources :menu_tables, except: [:show]
end

然后在menu_tables控制器下的_sidemenu.html.erb中是链接的代码,因此侧边栏中的每个链接都有不同的侧边框。

1 个答案:

答案 0 :(得分:2)

您可能需要告诉控制器使用layout 'menu'。在链接中,您提供了控制器的名称和匹配的布局,因此它“神奇地”工作。 见guides

  

2.2.14查找布局

     

要查找当前布局,Rails首先在中查找文件   app / views / layouts与控制器具有相同的基本名称。对于   例如,从PhotosController类渲染动作将使用   app / views / layouts / photos.html.erb(或   应用程序/视图/布局/ photos.builder)。如果没有这样的话   特定于控制器的布局,Rails将使用   app / views / layouts / application.html.erb或   应用程序/视图/布局/ application.builder。如果没有.erb布局,   如果存在,Rails将使用.builder布局。 Rails还提供   有几种方法可以更精确地为个人分配特定的布局   控制者和行动。

(注意:您可以查看日志中使用的布局,查找类似于Rendered menu_items/index.html.erb within layouts/application的行)