【问题标题】:How can I supply data to yield in my rails partial?如何提供数据以在我的 Rails 部分中产生?
【发布时间】:2018-03-13 05:42:08
【问题描述】:

我正在尝试使用某个布局文件渲染部分内容。但能够为该特定部分指定唯一值。以下是我拥有的当前文件,但所发生的只是yield 关键字都显示了集合值。我想传递一个自定义的“标题”并在“正文”中显示集合。

application/_news_article.html.erb

<!-- application/_news_article.html.erb  --> 
<% if news_article.report_text.present? %>
  <div class="news_article_entry">
    <div class="text-box">
      <span><%= "#{news_article.published_date.strftime("%D")}" %></span> -
      <%= "#{news_article.report_text}" %>
    </div>
    <% if news_article.impact_text.present? %>
      <div class="impact-text" data-toggle="tooltip" data-placement="bottom"
        title="<%= news_article.impact_text %>">Analysis</div>
    <% end %>
  </div>
  <hr />
<% end %>

application/_news_articles.html.erb

<!-- application/_news_articles.html.erb  --> 
<%= render partial: "news_article", collection: articles %>

layouts/_panel_box_scrollable.html.erb

<!-- layouts/_panel_box_scrollable.html.erb  --> 
<div class="panel panel-default skill-evaluation-box">
  <div class="skill-heading">
    <div class="row">
      <div class="col-xs-12">
        <%= "#{yield :title}".upcase %>
      </div>
    </div>
  </div>
  <div class="skill-body scrollable">
    <%= yield :body %>
  </div>
</div>

schools/show.html.erb

 <!-- schools/show.html.erb  --> 
 <%= render partial: 'news_articles', layout: "layouts/panel_box_scrollable", locals: { articles: @articles } %>

【问题讨论】:

  • 您可以使用content_for(:something) do ... end块显示在您匹配的yield(:something)
  • @MrYoshiji,我一直在尝试但没有运气 - 我应该在哪个文件中尝试?我一直把它放在application/_news_articles.html.erb
  • 您是否尝试将&lt;% content_for(:title) { "some test ttitle" } %&gt; 放入您的任何部分?

标签: ruby-on-rails partials


【解决方案1】:

Yield 是渲染部分的位置。如果你想渲染一个标题,你需要通过locals 传递一个标题,或者在你的一个模型上使用一个变量,或者在控制器中设置一个变量。在这种情况下,如果您想呈现标题,请执行以下操作:

<%= render partial: 'news_articles', layout: "layouts/panel_box_scrollable", locals: { articles: @articles, title: 'My Title' } %>

然后在你的布局中做:

<div class="panel panel-default skill-evaluation-box">
  <div class="skill-heading">
    <div class="row">
      <div class="col-xs-12">
        <%= title.upcase %>
      </div>
    </div>
  </div>
  <div class="skill-body scrollable">
    <%= yield %>
  </div>
</div>

【讨论】:

    猜你喜欢
    • 2019-04-19
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 2022-11-10
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    相关资源
    最近更新 更多