我在视图中有一个.each循环,它不断尝试迭代空集合。当它试图通过循环时,它会在尝试调用不存在的对象上的方法时抛出错误。我甚至尝试将循环放在if语句中测试集合的大小/空白,但它仍然给出了同样的错误。
导致ActiveRecord::RecordNotFound (Couldn't find Code without an ID):
<% @game_board.cards.each do |card| %>
<%= image_tag card.image %>
<% end %>
控制器操作:
def show
@game_board = GameBoard.find(params[:id])
@card = @game_board.cards.new
end
这个相同的代码实际上是在另一个视图中但工作正常,两个视图都给出了相同的@game_board对象。控制台甚至显示该集合为空。它没有找到显示记录的原因是图像实际上是Card的实例方法,它从Code对象获取图像,但问题是图像首先被调用。
我还在视图中显示了集合的大小,它显示了1,但是当我尝试显示集合的第一个或最后一个的ID时,没有渲染。
答案 0 :(得分:1)
<强>条件强>
对于此类问题,您还可以使用条件语句来查看是否填充了collection
:
#app/views/controllers/your_view.html.erb
<% if @game_boards.present? %>
<% @game_boards.each do |game| %>
...
<% end %>
<% end %>
是的,它增加了一定程度的复杂性,但如果你不知道你的@instance variable
是否会被填充,那么它将让你专注于为用户创建一个无异常的体验:)
答案 1 :(得分:0)
问题是我在show动作中创建的新卡。它被添加到集合中,因此我将其更改为@card = Card.new
。