如何提供数据以在我的rails部分产生?

时间:2018-03-12 21:20:54

标签: ruby-on-rails partials

我尝试使用某个布局文件渲染部分内容。但是能够为该特定部分指定唯一值。下面是我当前的文件,但所有发生的事情都是yield关键字都显示集合值。我想通过一个自定义"标题"并在" body"。

中显示该集合

应用/ _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 %>

应用/ _news_articles.html.erb

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

布局/ _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>

学校/ show.html.erb

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

1 个答案:

答案 0 :(得分: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>