![](/img/trans.png)
[英]Rails 4: NoMethodError: undefined method `each' for nil:NilClass
[英]Rails 3 - NoMethodError: undefined method for nil:NilClass in each Iteration
我正在遍歷Rails模型的一系列實例。 這是我的代碼:
product_details.each do |product_detail|
product_detail.label = Backend::ProductGroup.where(product_group_number: product_detail.product_group).first.label
end
“ product_detail”中的“標簽”屬性不是我的Rails ActiveRecord模型中的屬性。 我在類定義中添加了attr_accessor。 我這樣做是因為我想僅在需要執行此操作時動態添加此屬性。 當我在Rails控制台中運行沒有“每個”迭代的代碼時,它就可以正常工作。 但是當我執行上面的代碼時,我收到以下錯誤消息:
NoMethodError:nil:NilClass的未定義方法'label'
我做錯了什么嗎? 提前謝謝了。
您可能有幾個沒有匹配的product_group
product_detail
項。 因此,在空集合上調用.first
返回nil
。 要解決該錯誤,您可以在繼續之前測試是否找到了product_group:
product_details.each do |product_detail|
product_group = Backend::ProductGroup.where(product_group_number: product_detail.product_group).first
product_detail.label = product_group.label if product_group
end
您還可以像這樣更有效地執行此操作:
group_labels = BackEnd::ProductGroup.
where(product_group_number: product_details.map(&:product_group)).
inject({}){|m, g| m[g.product_group_number] = g.label; m}
product_details.each do |product_detail|
product_detail.label = group_labels[product_detail.product_group]
end
這將導致單個數據庫調用來獲取所有相關組,並將標簽放在鍵控哈希中,以便於發現和分配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.