我对Rails很陌生,对如何组织我的代码有疑问。我读到了胖模型和瘦调控制器,这很有意义(在理论上?)。
我现在要做的是:定期(通过Cron和Rails运行程序)从Internet下载一些数据并将其中的一部分存储在数据库中。我不明白的是在哪里放置与API相关的代码,我从中获取数据。我是否将它放入模型中并让它看起来像这样:
API data
'--> Model --> Database
下载的数据必须拆分并存储在两个不同的模型/数据库表中的情况如何呢?选择哪个版本?
版本1:
API data
'--> Model --> Database
'--> Model --> Database
第2版:
API data
'--> Controller
|--> Model --> Database
'--> Model --> Database
感谢您的帮助! :)
答案 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