LoginSignup
imperish
@imperish

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

rails nilじゃないのにnilって言われます…

cloud9
ruby 2.7.6p219 (2022-04-12 revision c9c2245c0a) [x86_64-linux]ruby
Rails 6.0.4

nilじゃないのにnilって言われる。

debuggerで値を確認したところ、確かに値は入っているのにnilと言われます。

スクリーンショット (538).png

debuggerで該当しそうな所の値の確認

[45, 54] in /home/ubuntu/environment/keisann/app/controllers/keisans_controller.rb
   45:                      #@crime_id["violent"] * @keisan["violent_num"] +
   46:                      #@crime_id["intrusive_theft"] * @keisan["intrusive_theft_num"] +
   47:                      #@crime_id["non_intrusive_theft"] * @keisan["non_intrusive_theft_num"] +
   48:                      #@crime_id["other_crime"] * @keisan["other_crime_num"]
   49:                      
=> 50:   @NewLife["total_point"] = @NewLife["tika2"] + @NewLife["tian"]
   51:   @NewLife.save
   52:   }
   53: end
   54: 
(byebug) @NewLife["tian"]
30
(byebug) @crime_id["heinous"]
30
(byebug) @keisan["heinous_num"]
1
(byebug) @crime_id
#<Crime12 id: 4, tika: nil, name: "中央区", crime_id: 1, heinous: 30, violent: 333, intrusive_theft: 124, non_intrusive_theft: 2255, other_crime: 1062, created_at: "2022-11-28 06:18:31", updated_at: "2022-11-28 06:18:31">
(byebug) 

#コメントアウトはデバッグのため使っています。

@crime_id["heinous"]を消すとシステムは動く。

なのでここがおかしいと思うのですが、何をどうしてもどうにもなりません。
このことが余計に混乱させています。

心優しい有識者の方、いつも本当にありがとうございます。お世話になっております。今回もどうぞ解決案の程、よろしくお願いします。

返信もなるだけすぐにさせて頂きますので、説明不足などありましたら気軽にお声掛けください。

0

1Answer

エラーが表示されている行は id.each { } ブロックの中にあるので複数回実行される可能性があります。 debugger で止めた時点より後の実行で @crime_id が nil になるのでは。

エラーの原因としてあり得そうなのは @crime_id = Crime12.all.find_by_crime_id(n) における n の使い方です。その上の方で @NewLife = NewLife.find(n) としていることから、 nNewLife モデルの id だと思われますが、 ここでは無関係な Crime12 モデルの id として扱っています。それでたまたま適当な Crime12 モデルが取れることもあれば見つからないこともあるせいで、中途半端に動いているように見えます。

1

Comments

  1. @imperish

    Questioner
    動きました…ズバリ、ご指摘の通りでした。流石です。
    自分のコードの書き方がめちゃくちゃすぎてエラーが止まりません...
    ありがとうございました!助かりました!

Your answer might help someone💌