diff options
author | rhenium <rhenium@rhe.jp> | 2014-05-18 07:24:20 +0900 |
---|---|---|
committer | rhenium <rhenium@rhe.jp> | 2014-05-18 07:24:20 +0900 |
commit | cf2cfc8ec1425bc65851507628934e6f231b19b9 (patch) | |
tree | 7b36b911902c4b5daadc1c1612409476fe548539 /app/models/favorite.rb | |
parent | 68fcf579ec1e6d8403f6c2f22889299325097f4d (diff) | |
download | aclog-cf2cfc8ec1425bc65851507628934e6f231b19b9.tar.gz |
collector: bulk insert received events every seconds
Diffstat (limited to 'app/models/favorite.rb')
-rw-r--r-- | app/models/favorite.rb | 29 |
1 files changed, 11 insertions, 18 deletions
diff --git a/app/models/favorite.rb b/app/models/favorite.rb index 4447ccf..8c4202c 100644 --- a/app/models/favorite.rb +++ b/app/models/favorite.rb @@ -2,27 +2,20 @@ class Favorite < ActiveRecord::Base belongs_to :tweet belongs_to :user - def self.create_from_json(json) - tweet = Tweet.create_from_json(json[:target_object]) - user = User.create_from_json(json[:source]) - - transaction do - favorite = Favorite.create!(tweet: tweet, user: user) - tweet.update_reactions_count(favorites_count: 1, json: json[:target_object]) - - favorite + # This doesn't update Tweet#reactions_count. + def self.create_bulk_from_json(array) + objects = array.map do |json| + self.new(user_id: json[:source][:id], + tweet_id: json[:target_object][:id]) end - rescue ActiveRecord::RecordNotUnique => e - logger.debug("Duplicate favorite: #{user.id} => #{tweet.id}") - self.where(tweet: tweet, user: user).first + + self.import objects end - def self.destroy_from_json(json) - transaction do - deleted_count = self.where(user_id: json[:source][:id], tweet_id: json[:target_object][:id]).delete_all - if deleted_count > 0 - Tweet.find(json[:target_object][:id]).update_reactions_count(favorites_count: -1, json: json[:target_object]) - end + # This doesn't update Tweet#reactions_count. + def self.delete_bulk_from_json(array) + array.each do |json| + self.delete_all(user_id: json[:source][:id], tweet_id: json[:target_object][:id]) end end end |