Rails 5.2.3 content_for不能按指定方式工作

问题描述 投票:0回答:1

因此,我已经阅读了围绕[[content_for的许多其他问题报告,但我仍然无法弄清楚代码中发生了什么。

我正在尝试从各种视图中添加一些引导面包屑数据,每个视图都基于代码中的位置具有不同的content_for。然后在我的application.html.erb中,我调用一个呈现面包屑数据的部分。但是,当我查看源代码时,数据为空。

我以为我可能有订购问题,我不认为是这种情况,但我不确定。

这里是事件的顺序。我正在调用

new.html.erb来呈现新视图并设置content_for数据。然后,在布局中,我在主布局的主体中调用部分_ breadcrumb.html.erb,以显示content_for数据。

new.html.erb

<% content_for :breadcrumb do %> <li class="breadcrumb-item"><%= link_to "Home", root_path %></li> <li class="breadcrumb-item"><%= link_to "Examples", examples_path %></li> <li class="breadcrumb-item active">Horizontal Form</li> <% end %> <div class="app-example container"> <div class="row"> <%= render partial: "bootstrap", layout: "card_bootstrap", locals: { title: "Horizontal Form" } %> <%= render partial: "form", layout: "card_simple_form", locals: { title: "Horizontal Form" } %> </div> <%= render partial: "shared/tipps" %> <%# move modals to bottom %> <%= render partial: "shared/modal", locals: { id: "modal-bootstrap", title: "Bootstrap", content: render_source(File.read(File.join(Rails.root, 'app/views/examples/horizontals/_bootstrap.html.erb'))) } %> <%= render partial: "shared/modal", locals: { id: "modal-simpleform", title: "Simple Form", content: render_source(File.read(File.join(Rails.root, 'app/views/examples/horizontals/_form.html.erb'))) } %> </div>

_ breadcrumb.html.erb

<div class="app-breadcrumb container"> <div class="d-flex flex-row justify-content-between"> <ol class="breadcrumb bg-transparent px-0"> <%= yield :breadcrumb %> </ol> <div> <button type="button" class="btn btn-sm btn-outline-secondary mt-2 mr-2 d-none" data- tooltip data-placement="bottom" data-trigger="hover" title="compare by clicking fast" data-toggle="button" aria-pressed="false" autocomplete="off"> Swap </button> <div class="btn-group btn-group-toggle mt-2 d-none" data-toggle="buttons"> <label class="btn btn-sm btn-outline-secondary"> <input type="radio" name="view" id="stack" autocomplete="off"> Stack </label> <label class="btn btn-sm btn-outline-secondary active"> <input type="radio" name="view" id="split" autocomplete="off" checked> Split </label> </div> </div> </div> </div>

application.html.erb

<!DOCTYPE html> <html> <head> <title><%= full_title(yield(:title)) %></title> <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track": 'reload' %> <%= javascript_include_tag "application", "data-turbolinks-track": 'reload' %> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body data-spy="scroll" data-target=".bs-docs-sidebar"> <%= render "header" %> <div class="container"> <%= render "flash" %> <%= render "breadcrumb" %> <%= yield %> <%= render "footer" %> <%= debug(params) if Rails.env.development? %> <!-- This debug code shows the HTTP headers/environment --> <!-- ul> <% request.env.each do |item| %> <li><%= item[0] %> : <%= item[1] %></li> <% end %> </ul --> </div> </body> </html>
我知道部分图像正在渲染,因为除了content_for数据以外的所有内容都显示在源中(和屏幕上。)

但是,在代码中yield:breadcrumb的地方,我什么也没得到。来源只是显示

<ol class="breadcrumb bg-transparent px-0"> </ol>

谁能提供有关此问题的更多见解?如果我需要提供更多信息,也请告诉我。我是Rails的新手程序员,我们将为您提供任何帮助。
view rendering yield ruby-on-rails-5.2 content-for
1个回答
0
投票
事实证明这是路由问题,而不是

content_for和yield的问题。我进行了一些目录更改,以更好地组织应用程序,并且所使用的路由指向其他目录中文件的较旧版本。一个没有正确设置content_for的程序。在route.rb文件中正确更改了路由,但在视图参考中未正确更新路由。

感谢所有关注此问题的人,对于在本来应该是显而易见的问题上的任何浪费,我深表歉意。至少现在回头看看。这是个很好的教学时机,当您专注于要添加的新内容时,不要忽略您认为自己熟悉的所有细节。经验教训!
© www.soinside.com 2019 - 2024. All rights reserved.