加载错误的部分

时间:2013-11-06 10:39:02

标签: ruby-on-rails ruby-on-rails-4 partial-views renderpartial

我是如何从Project填充两个控制器SubProjectReports以及一个Project表,其中有一列留空“并添加{{ 1}} if是从SubProject_id填充的。

项目控制器显示操作

SubProject

SubProject控制器显示操作

@keywords = @project.keywords

在项目#show中,我呈现@reports = @project.keywords 并在@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#show,以及@reports部分我有

_report.html.erb

问题是,如果我 <%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时,将会呈现正确的部分。 为什么我不能使用&lt;%= render @ reports%&gt;? 或者我做错了,为什么在报告中我需要两个循环?

1 个答案:

答案 0 :(得分:2)

<%= render @reports %>

Rails使用对象的类来确定要使用的部分,而不是集合变量的名称。集合@reports包含Keyword个对象,因此除非您另有说明,否则将使用_keyword.html.erb部分。

参见Rails rendering guide中的3.4.5,你甚至可以拥有不同类的对象,每个对象都将使用部分匹配的类进行渲染。