1

これは簡単な質問です。私はここで、開発者の名前をキーとして持つハッシュを作成し、完了した機能ごとに合計したポイント数を作成する機能を作成しています。しかし、自分自身をタスクに割り当てない怠惰な開発者がいるため、nil をキーとしてハッシュを取得し、NoMethodError: undefined method `name' for nil:NilClass を取得します。nil を無視するクリーンな方法は何でしょうか?? ここに私のコードがあります

feat_hash = {}
features.group_by {|dev| dev.developer.name}.each {|dev_id, feat| feat_hash[dev_id] = feat.inject(0){|sum, x| sum + x.points}}

前もって感謝します!:D

編集:かっこいいので、これは私が実行したときに得られる出力です。割り当てられた機能と空の機能を持つスプリントを介してレンダリングされることに気付くでしょうが、nil をキーとして割り当てられていない機能を持つハッシュに入るとすぐにバグアウトします。

         _________features___________
{"Gary"=>13, "Rob"=>8, "Hannes"=>8, "Sandra"=>1}
      ___________bugs_____________
{}
      __________chores____________ 
{}
*************** New Sprint ************************
     _________features___________ 
{}
     ___________bugs_____________
{}
     __________chores____________
{}
*************** New Sprint ************************
     _________features___________
{}
     ___________bugs_____________
{}
     __________chores____________
{}
*************** New Sprint ************************
 NoMethodError: undefined method `name' for nil:NilClass

そして残りのエラースタック

4

2 に答える 2

1

dev.developer.name命令でdev.developerがであるため、このエラーが発生しますnil。これらの開発者は、group_by

features.reject {|dev| dev.developer.nil?}.group_by {|dev| dev.developer.name}.each { ...
于 2012-02-14T09:03:45.123 に答える
0

ここでは、tryそのタイプのエラーを回避するために使用する一般的な方法を示します。

feat_hash = {}
features.group_by {|dev| dev.developer.name}.try(:each) do |dev_id, feat|        
    feat_hash[dev_id] = feat.inject(0){|sum, x| sum + x.points}
end
于 2015-04-22T12:40:04.550 に答える