Для этого полностью игнорируйте контроллеры. Модели служат уровнем абстракции для доступа к данным. В вашем случае у вас есть некоторые локально сохраненные данные в виде базы данных, и у вас есть удаленные данные, которые вы извлекаете как JSON через HTTP. Итак, у вас есть ваши обычные модели ActiveRecord, и у вас есть модель для ваших данных JSON.
Предположим, у вас есть модель с именем RemoteData, которая извлекает документ JSON и имеет несколько методов, позволяющих вам аккуратно получать из него данные. У вас также есть модель StoredData, которая хранит извлеченный контент в вашей базе данных для последующего отображения.
Теперь вы хотите автоматизировать процесс вызова RemoteData.fetch('url')
и последующего вызова StoredData.create :params
для возвращенных данных. Для этого вы должны создать «задание на грабли». Вот пример:
# lib/tasks/fetch.rake
desc "Fetch remote data and persist it"
task :fetch => :environment do
RemoteData.fetch('url').each do |json_data|
sd = StoredData.create :url => 'url', :data => json_data
puts "Retrieved 'url' and saved data in record ##{sd.id} at #{DateTime.now}."
end
end
Затем вы должны настроить системный crontab так часто, как вам хотелось бы. Задача Rake обрабатывает бизнес-логику, а ваши модели обрабатывают взаимодействие с данными. Красиво и чисто.