前提・実現したいこと
現在Rails開発に携わっています。
CSVの一括登録・更新機能を実装しています。
以下のコードがRuboCop: Combine this loop with the previous loop. [Style/CombinableLoops]
となっているため、のエラーがでないように修正したいです。
ruby
1value = row[:value] 2# 先に更新かどうかを確認し、そうでなければ登録する 3# 更新の場合 4(1..5).each do |i| 5 if fuga.id == hoge.public_send("fuga_#{i}_id") 6 updated_indexs << i 7 return { 8 "hoge_#{i}_id": fuga.id, 9 "hoge_value_#{i}": value, 10 } 11 end 12end 13# 登録の場合 14(1..5).each do |i| 15 unless updated_indexs.include?(i) 16 return { 17 "hoge_#{i}_id": fuga.id, 18 "hoge_value_#{i}": value, 19 } 20 end 21end 22 23 24
rubocopの修正方針は一つのループの中に入れろということだとは認識しています。
ただ、仕様的には、分ける必要があるのかなと思っており、rubocopエラーが出ないようにするにはどうしたらいいかアドバイスを頂きたいです。
以下仕様です。
①アップロードするCSVには複数行があり、それをアップロードしたらhogeテーブルの値(fuga_N_id,fuga_value_N)が更新されます。(一つのhoge.idに対して最大5行)
CSVの列にはid,fuga_id,fuga_value
があります。
②hogeテーブルにはid,name,fuga_1_id ~ fuga_5_id, fuga_value_1 ~ fuga_value_5
などがあり、
このCSVアップロードによってfuga_1_id ~ fuga_5_id, fuga_value_1 ~ fuga_value_5
を登録・更新できます。
(hogeテーブルにおいてfuga_N_id,fuga_value_Nは横持ち。過去の経験からこの仕様に落ち着いた。)
③登録行か更新行はCSVに入力したfuga_id
が、すでにhogeテーブルのfuga_1_id ~ fuga_5_id
に存在していれば(一致していれば)更新、そうでなければ登録です。
①〜③のように、まず更新かどうかを確認してから、そうでなければ登録したいので、上記のコードのようにまず5回転してfuga_idがどれも一致しなければ、登録するようにしています。
それも踏まえてどのように修正すればいいかアドバイス頂けますと助かりますmm
試したこと
・RuboCop: Combine this loop with the previous loop. [Style/CombinableLoops]でググる
・他に参考がないか調べている
回答1件
あなたの回答
tips
プレビュー