我目前正致力于在我的应用中保存用户社交媒体帖子。基本思想是检查帖子是否存在,如果它确实更新了数据,或者如果没有创建新行。现在我正在遍历从社交平台收到的所有帖子,所以我可能会循环遍历3,000并将它们添加到数据库中。
有没有办法可以重写这个来同时保存所有项目,这有望加快保存方法?
post_data.each do |post_data_details|
post_instance = Post::Tumblr.
where(platform_id: platform_id).
where("data ->> 'id' = ?", post_data_details["id"].to_s).
first_or_initialize
exisiting_data = post_instance.data
new_data = exisiting_data.merge! post_data_details.to_hash
post_instance.data = new_data
post_instance.refreshed_at = date
post_instance.save!
end
答案 0 :(得分:0)
优良作法是通过sidekiq或其他后台作业解决方案运行此类长时间运行的作业。
您还可以使用单个ActiveRecord事务。 http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html
但请记住,如果其中一条记录无效,整个交易将被回滚。