这是我的索引操作:
def index
@cats = Cat.all
end
这是索引视图:
#views/cats/index.html.erb
<h1>Listing Cats</h1>
<table>
<thead>
<tr>
<th>Name</th>
<th>Age</th>
<th>Meows</th>
</tr>
</thead>
<tbody>
<%= render partial: "shared/animal", collection: @cats %>
</tbody>
</table>
这部分位于shared
文件夹中,用于显示每只猫:
# views/shared/_animal.html.erb
# I purposely did not name it views/shared/_cat.html.erb
<tr>
<td><%= cat.name %></td>
<td><%= cat.age %> </td>
<td><%= cat.meows %> </td>
</tr>
以下是我遇到的错误:
`未定义的局部变量或方法'cat'用于#&lt; #`
我错过了什么?
答案 0 :(得分:1)
应该是animal
而不是cat
- 您的部分名为_animal.html.erb
,在其中,您可以引用animal
来获取正在呈现的实例。
<tr>
<td><%= animal.name %></td>
<td><%= animal.age %> </td>
<td><%= animal.meows %> </td>
</tr>
答案 1 :(得分:1)
您获得的错误undefined local variable or method 'cat' for #<#
表示您没有'cat'
所以你应该使用一个可从你的视图中访问的变量,迭代@animals列表就是你想要做的事情我认为这是一个解决方案。
如果要使用partial shared / animals
,可以将@cats重命名为@animals但您还要迭代在控制器中检索的数组
您可以使用以下代码作为解决方案:
控制器:
def index
@animals = Cat.all # or Dog.all ...
end
索引视图:
#views/cats/index.html.erb
<h1>Listing Cats</h1>
<table>
<thead>
<tr>
<th>Name</th>
<th>Age</th>
<th>Meows</th>
</tr>
</thead>
<tbody>
<%= render partial: "shared/animals", collection: @animals %>
</tbody>
</table>
动物部分观点:
# views/shared/_animals.html.erb
# because I am using this as a basis for a bigger issue I'm trying to figure out
<% @animals.each do |animal|%>
<tr>
<td><%= animal.name %></td>
<td><%= animal.age %> </td>
<td><%= animal.meows %> </td>
</tr>
<% end %>