Sidekiq の結果を待ってからユーザーに表示します
概要
非常に基本的な Sidekiq のタスク (GET リクエストを使用してデータをフェッチする) を実装したところです。データベースにデータを追加するには root_path でこれを行う必要があるため、データベースを更新するために何かできることはないかと考えています。ページか何かでユーザーに気付かれないようにしますか?
def index
@q = Jobs.ransack(params[:q])
if params_from_search_empty(@q)
@pagy, @jobs = pagy(Jobs.all, items: Jobs::NUM_JOBS_TO_FETCH)
FetchJobs.perform_later if @jobs.empty? || @pagy.count.empty?
redirect_to root_path
else
# Search results
@jobs = @q.result(distinct: true)
@pagy, @jobs = pagy(@jobs, items: Jobs::NUM_JOBS_TO_FETCH)
end
end
ご覧のとおり、FetchJobs.perform_later はその仕事を行いますが、データベースにその結果が設定されるまで、ユーザーは root_path にリダイレクトされ、Web ページをリロードするまで何も表示されません。
ありがとう!
解決策
最大の問題はユーザーの期待です。ユースケースによっては、後の処理のためにキューに入れられたことをユーザーに知らせるだけで十分な場合があります。ユーザーは、それが表示されなくても心配することはなく、表示が完了したら自分で更新して確認します。
ユースケースによっては、電子メールまたはテキスト メッセージを送信する方が合理的になる場合があります。また、ActionCable を使用して Web UI で通知をプッシュしたい場合もあります。