抱歉我的英语不好。我得到了如下错误。
undefined method `[]=' for nil:NilClass
app/controllers/tasks_controller.rb:69:in `block in show'
app/controllers/tasks_controller.rb:67:in `each'
app/controllers/tasks_controller.rb:67:in `each_with_index'
app/controllers/tasks_controller.rb:67:in `show'
以下是'tasks_controller.rb'中的代码:
@teammates_form = Array.new(@teammates.size-1){Hash.new}
@teammates.each_with_index do |t, idx|
if t.id != current_user.id
@teammates_form[idx]['id'] = t.id # <--- line 69
@teammates_form[idx]['name'] = t.name
@teammates_form[idx]['t_id'] = @task.id
end
end
但如果我更改代码如下:
@teammates_form[0]['id'] = t.id
@teammates_form[0]['name'] = t.name
@teammates_form[0]['t_id'] = @task.id
它有效...我不知道为什么我不能在数组中使用索引。
提前感谢您的帮助。
答案 0 :(得分:0)
您是否检查过使用像Pry这样的错误发生循环的时间?
我怀疑实际上是错误发生的最后一次。在代码的第一行,您可以使用Array.new(@teammates.size-1){Hash.new}
创建一个哈希数组。这意味着如果@teammates
包含3个项目,则新数组将只包含2个哈希值(即[{}, {}]
)。这反过来意味着对于最终的队友,@teammates_form[idx]
将是零。请尝试使用Array.new(@teammates.size){Hash.new}
,看看是否有帮助。
答案 1 :(得分:0)
# ⇓⇓ ? WHY?
@teammates_form = Array.new(@teammates.size-1){Hash.new}
您在@teammates
的最后一次迭代中产生此错误,因为@teammates_form
缩短了1个元素。