簡體   English   中英

Rails 3-NoMethodError:每個迭代中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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM