1

私はどのように 2 つのコントローラでProjectありSubProject、テーブルにReportsは空のままの列があり、 からデータが取り込まれ、 からデータが取り込まれる場合Projectに追加されます。SubProject_idSubProject

プロジェクト コントローラの表示アクション

@keywords = @project.keywords

サブプロジェクト コントローラの表示アクション

@reports = @project.keywords

project#show でレンダリング@keywordsし、_keyword.html.erb部分的にレンダリングします

 <tr>
  <td><%=keyword.id%></td> 
  <td><%=keyword.name%></td>
  <td>
  <%=keyword.reports.where(subproject_id: nil).find_each do |keyword_r|%>
    [<%=keyword_r.possition%>]
  <%end%>
  </td>
</tr>

私のsubproject#showI render@reportsでは、_report.html.erbパーシャルでは I have

 <%report.find_each do |keyword_r|%>
  <tr><td> <%=keyword_r.name%></td>
    <td>
      <%keyword_r.reports.where(subproject_id: !nil).each do |kr|%>
        [<%=kr.possition%>]
      <%end%>
    </td>
  </tr>
<%end%>

問題は、私がそう<%=render @reports%>すると、レンダリングされること@keywordsです。しかし、私が行う<%= render partial: "report", locals: {report: @reports}%>と、正しいパーシャルがレンダリングされます。<%= render @reports%> を使用できないのはなぜですか? または、私が間違っていることと、レポートの部分的な部分で 2 つのループが必要なのはなぜですか?

4

1 に答える 1

2
<%= render @reports %>

Rails は、コレクション変数の名前ではなく、オブジェクトのクラスを使用して使用するパーシャルを決定します。コレクションにはオブジェクト@reportsが含まれているため、特に指定しない限り、パーシャルが使用されます。Keyword_keyword.html.erb

Rails レンダリング ガイドの3.4.5 を参照してください。異なるクラスのオブジェクトを使用することもできます。各オブジェクトは、そのクラスに一致するパーシャルでレンダリングされます。

于 2013-11-06T10:55:21.957 に答える