データを取得するためにコントローラーで Web サービス呼び出しを行うことに依存するアプリケーションがあります。ページがコンテンツを自動的に更新する機能、つまり、設定された期間に基づいてアクションを呼び出す機能を追加したいと考えています。私の問題をほのめかす多くの投稿を見つけましたsetInterval
。私には不可解なことに、更新ごとに2回起動したものを試しました。そのためのコードは次のとおりです。
$(document).ready(
function(){
var loader = function(){
$('.container').load('/dashboard/index');
};
setInterval(loader, 3000);
});
これは ajax の問題だと思いますが、更新を通知するトリガー イベントがありません。どんな助けでも大歓迎です。
私のコントローラーコード:
class DashboardController < ApplicationController
include ActionView::Helpers::NumberHelper
include FakeMaker
def index
@reports = fake_maker("report", 22)
@workstations = fake_maker("workstation", 8)
@data_sources = fake_maker("data_source", 2)
end
end
FakeMaker クラス
module FakeMaker
SOURCE_A = "A"
SOURCE_B = "B"
TYPES_A = Faker::Lorem.words(num = 10)
TYPES_B = Faker::Lorem.words(num = 4)
def fake_maker(type, count)
fake = []
case type
when "report"
count.times { fake << fake_report }
when "workstation"
count.times { fake << fake_workstation }
when "data_source"
fake = fake_data_source
end
fake
end
def fake_report
report = { source: [SOURCE_A, SOURCE_B].sample,
count: number_with_delimiter(Faker::Number.number(5), :delimiter => ',') }
report[:type] = report[:source] == SOURCE_A ? TYPES_A.sample : TYPES_B.sample.capitalize
report
end
def fake_workstation
{ name: Faker::Lorem.word,
downloaded: number_with_delimiter(Faker::Number.number(3), :delimiter => ','),
available: number_with_delimiter(Faker::Number.number(5), :delimiter => ','),
last_connect: Random.rand(10.weeks).ago.strftime("%Y-%m-%d %H:%M:%S") }
end
def fake_data_source
data_sources = []
["A", "B"].each do |source|
data_sources << { type: source,
name: Faker::Internet.url,
status: ["UP", "DOWN"].sample }
end
data_sources
end
end