我是如何从Project
填充两个控制器SubProject
和Reports
以及一个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;?
或者我做错了,为什么在报告中我需要两个循环?
答案 0 :(得分:2)
<%= render @reports %>
Rails使用对象的类来确定要使用的部分,而不是集合变量的名称。集合@reports
包含Keyword
个对象,因此除非您另有说明,否则将使用_keyword.html.erb
部分。
参见Rails rendering guide中的3.4.5,你甚至可以拥有不同类的对象,每个对象都将使用部分匹配的类进行渲染。