imperish
@imperish

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

rails このeachがうまく実行できない理由

やろうとしていること

eachでCrime12のcrime_idが1から23までを抽出。
便宜上、@crime_calに入れる。
(ちなみにここ、なぜかインスタンス変数じゃなく、普通の変数を使おうとしても使えなかったのですが、ここの理由も分かる方いらっしゃいましたら、できれば教えて頂きたい…!)

Crime12のカラムとKeisanモデルのカラムを掛け合わせ目的の数値を
Crime12のカラム、@crime_cal["crime_point"] に入れる。
(debuggerで確認するとこれはうまくいっている様子)
@crime_cal.saveで記録する。
(このsaveを抜きにしても問題なく実行されると思ったのですが、これは意味のないことをしていますか?これをせずとも、データベースに変更が記録されるのでしょうか?)

あとは配列を作って、crime_id、1から23までのcrime_pointをこの配列に入れれば成功なのですが、何故か、
@crime_cal_result[0]にcrime_idが23のcrime_pointしか入っていません。
あとは全部nilでした…
何が原因でしょうか。

@crime_cal_result.classで調べるとちゃんとarrlyで出ますし、
入れようとしているのももちろんintegerでした。
あとdebuggerを実行しているときに@crime_cal_resultに適当に数値を入れると入ります。
もう降参です。

このeach文です…

id =[]
  id = [*1..23]
  
  id.each { |n| @crime_cal = Crime12.all.find_by_crime_id(n)
  @crime_cal["crime_point"] = @crime_cal["heinous"] * @keisan["heinous_num"] +
                              @crime_cal["violent"] * @keisan["violent_num"] +
                              @crime_cal["intrusive_theft"] * @keisan["intrusive_theft_num"] +
                              @crime_cal["non_intrusive_theft"] * @keisan["non_intrusive_theft_num"] +
                              @crime_cal["other_crime"] * @keisan["other_crime_num"]
  @crime_cal.save
  @crime_cal_result = []
  @crime_cal_result << @crime_cal["crime_point"]
  }
debugger

皆さま、いつも、いつもありがとうございます。
今回もQiitaのエンジニアの皆さんのお力をお貸しください。
よろしくお願いします。

0

1Answer

@crime_cal_result = []

で毎ループ初期化してるからじゃないでしょうか

普通の変数を使おうとしても使えなかったのですが

「どんな風に」使えなかったのかも書いてみましょう

1Like

Comments

  1. @imperish

    Questioner

    稲村さん、前回に引き続き今回も回答して頂きありがとうございます!
    全くその通りです。すぐに解決しました。
    「どんな風に」使えなかったのか,
    書こうとしたのですが、普通に使えました。
    多分、元からからあったエラーが原因だったのだと思われます。

    今思うと恥じ入るばかりの質問でした...
    もうちょっと自分で解決できるようにしたいと思います。
    ありがとうございました!

Your answer might help someone💌