我有一段代码,看起来像这样:
order_items_info.pluck(:quantity_shipped).sum.abs
我在日志中发现了这个错误:
Error reindexing order 123456 - NoMethodError - undefined method `+' for nil:NilClass
inject(:+) || 0
^^^^^^
我找不到任何方法来重现这个错误。order_items_info
是一个哈希数组,但这并不重要。以下是我尝试过的:
Loading production environment (Rails 6.1.7)
irb(main):001:0> order_items_info = nil
=> nil
irb(main):002:0> order_items_info.pluck(:quantity_shipped).sum.abs
(irb):2:in `<main>': undefined method `pluck' for nil:NilClass (NoMethodError)
irb(main):003:0> order_items_info = []
=> []
irb(main):004:0> order_items_info.pluck(:quantity_shipped).sum.abs
=> 0
irb(main):005:0> order_items_info = [{quantity_shipped: nil}]
=> [{:quantity_shipped=>nil}]
irb(main):006:0> order_items_info.pluck(:quantity_shipped).sum.abs
=> 0
irb(main):007:0> order_items_info = [nil]
=> [nil]
irb(main):008:0> order_items_info.pluck(:quantity_shipped).sum.abs
/home/deploy/zonmaster/shared/vendor/bundle/ruby/3.1.0/gems/activesupport-6.1.7/lib/active_support/core_ext/enumerable.rb:157:in `block in pluck': undefined method `[]' for nil:NilClass (NoMethodError)
map { |element| element[key] }
^^^^^
irb(main):009:0> order_items_info = [{quantity_shipped: 'abd'}]
=> [{:quantity_shipped=>"abd"}]
irb(main):010:0> order_items_info.pluck(:quantity_shipped).sum.abs
(irb):10:in `<main>': undefined method `abs' for "abd":String (NoMethodError)
但是没有一个在inject
上给予我错误。
1条答案
按热度按时间vaqhlq811#
pluck
在这里是一个Enumerable方法。https://apidock.com/rails/Enumerable/pluck在您的示例中,您的数据键是字符串,但您通过符号提取它,然后它返回
nil
而不是value。你需要使用string key:
"qty"