在rails

时间:2015-05-19 15:34:13

标签: ruby-on-rails postgresql

我目前正致力于在我的应用中保存用户社交媒体帖子。基本思想是检查帖子是否存在,如果它确实更新了数据,或者如果没有创建新行。现在我正在遍历从社交平台收到的所有帖子,所以我可能会循环遍历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

1 个答案:

答案 0 :(得分:0)

优良作法是通过sidekiq或其他后台作业解决方案运行此类长时间运行的作业。

您还可以使用单个ActiveRecord事务。 http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

但请记住,如果其中一条记录无效,整个交易将被回滚。