在哪里放置下载和存储数据的代码?

时间:2016-09-01 18:29:43

标签: ruby-on-rails ruby organization

我对Rails很陌生,对如何组织我的代码有疑问。我读到了胖模型和瘦调控制​​器,这很有意义(在理论上?)。

我现在要做的是:定期(通过Cron和Rails运行程序)从Internet下载一些数据并将其中的一部分存储在数据库中。我不明白的是在哪里放置与API相关的代码,我从中获取数据。我是否将它放入模型中并让它看起来像这样:

API data
    '--> Model --> Database

下载的数据必须拆分并存储在两个不同的模型/数据库表中的情况如何呢?选择哪个版本?

版本1:

API data
    '--> Model --> Database
            '--> Model --> Database

第2版:

API data
    '--> Controller
            |--> Model --> Database
            '--> Model --> Database

感谢您的帮助! :)

1 个答案:

答案 0 :(得分:0)

正如@agmcleod建议你应该使用ra MATCH (u), (a)-[:hasTheme]->(:Theme) -[:hasChild*]->(:Theme) <-[:theme]-(:Annotation) <-[:annotation]-(e:Explication) WHERE id(a)=7 AND id(u)=4 AND (e)-[:owner]->(u) OPTIONAL MATCH (e)<-[:explication]-(p:PeerReview) RETURN e, count(e) AS explicationCount, p ORDER BY explicationCount ASC 运行的raketask,然后添加cron jobs

开始于:

MATCH (u), (a)-[:hasTheme]->(:Theme) -[:hasChild*0..]->(:Theme) <-[:theme]-(:Annotation) <-[:annotation]-(e:Explication) WHERE id(a)=7 AND id(u)=4 AND (e)-[:owner]->(u) OPTIONAL MATCH (e)<-[:explication]-(p:PeerReview) RETURN e, count(p) as peerReviewCount ORDER BY peerReviewCount ASC

现在打开rake task_name

rails g task api_service fetch_data_for_model1 fetch_data_for_model2

现在打开

lib/tasks/api_service.rake

并给它rake任务路径

namespace :api_servicedo
  desc "Update database with new Movies"
  task :fetch_data_for_model1=> :environment do
     puts 'start fetching data'
     API.new(credentials).fetch_movies.each do |movie|
        puts "creating movie id =#{movie.id}"
        Movie.find_or_create_by(movie.attributes)
     emd
     puts 'Finisheed!'
  end

  desc "TODO"
  task :fetch_data_for_model2=> :environment do
     ....
  end

end

您可以考虑使用https://github.com/javan/whenever,它为编写和部署cron作业提供了清晰的语法。

每当您可能创建具有此类定义的crontab -e文件时

00 00 * * * cd /Users/you/projects/myrailsapp && /usr/local/bin/rake RAILS_ENV=production api_service:fetch_data_for_model1