LoginSignup
1
0

More than 5 years have passed since last update.

Railsで前後の日付間の値の増減を抽出して保存する

Posted at

要件

サーバ種別と台数が保存されたテーブルがもともとあった。で、日付の前後で差分があった場合のみ抜き出して別テーブルに入れておきたい。

使うモデル

以下のカラムを持つServerCountモデルを元に

ServerCountモデル サーバの台数を保持
server_type サーバ種別(AppとかDBとか)
server_count 種別ごとのサーバの台数
created_at Railsデフォルト。ここから日付ごとのサーバ台数がわかる
ServerIncrementモデル サーバの増減を保持するモデル
server_type サーバ種別(AppとかDBとか)
from_number 増減前のサーバの台数
to_number 増減後のサーバ台数
from_date 増減前の日付
to_date 増減後の日付
こんな感じで書いた
server_counts = ServerCount.all.order(created_at: :desc)
server_counts.each_cons(2) do |server| 
  next unless (server[0].server_count - server[1].server_count) != 0
  next unless server[0].server_type.eql? server[1].server_type
  ServerIncrement.find_or_create_by(
    server_type: server[0].server_type,
    from_number: server[0].server_count,
    to_number: server[1].server_count,
    from_date: server[0].created_at,
    to_date: server[1].created_at
  )
end

流れ

each_consメソッドで2つずつレコードを抜き出して前後の値を比較して0以外であり、かつ前後のサーバ種別が同じという条件をつける(これがないと違った種別のサーバ台数も比較してしまう)
そこからfind_or_created_byメソッドで登録されていない場合のみレコード作成

もっといいやり方があればコメントください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0