実現したいこと
- フロントエンドから送られてきたデータ(params[:profile])を10秒間は配列で保存して、10秒に1回データを更新したい
前提
サーバー負荷軽減のため「フロントエンドから送られてきたデータを10秒間は配列で保存して、10秒に1回保存した配列の最後の要素でデータを保存したい。そして保存したら配列を空にして繰り返す。」という仕様で実装したいです。
現在は以下のように実装しているのですが、上手く動いていないです。(10秒に1回データをupdateしたいのに何度もupdateされてしまいます。)
どうか、アドバイスなどよろしくお願いいたします。
該当のソースコード
def auto_profile_update now = Time.zone.now user = current_user array = [] loop do array << params[:profile] # 10秒経過したらループを抜ける if Time.zone.now - now > 10 break end end target_profile = profile.last user.update!( profile: target_profile.to_s ) array.clear end
試したこと
ループ内の以下の「# 10秒経過したらループを抜ける」部分に問題があると思い、様々な条件で試してみましたが、上手く動きませんでした。
loop do array << params[:profile] # 10秒経過したらループを抜ける if Time.zone.now - now > 10 break end end
補足情報(FW/ツールのバージョンなど)
Rails6、Ruby3.2.2
10 秒後に書き込みが成功するとは限らないし、書き込む前に読み出しが発生したらデータがおかしくなるのでは…。

回答1件
あなたの回答
tips
プレビュー