Commit c1b783c7bd7dfe040570a86d255cd5cda7e4a0b1

Authored by Victor Costa
1 parent d0472735

Add counter cache for article followers

app/models/article_follower.rb
1 1 class ArticleFollower < ActiveRecord::Base
  2 +
2 3 attr_accessible :article_id, :person_id, :since
3   - belongs_to :article
  4 + belongs_to :article, :counter_cache => :followers_count
4 5 belongs_to :person
  6 +
5 7 end
... ...
db/migrate/20150909091347_add_followers_count_to_article.rb 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +class AddFollowersCountToArticle < ActiveRecord::Migration
  2 +
  3 + def self.up
  4 + add_column :articles, :followers_count, :integer, :default => 0
  5 + add_column :article_versions, :followers_count, :integer
  6 +
  7 + execute "update articles set followers_count = (select count(*) from article_followers where article_followers.article_id = articles.id)"
  8 + end
  9 +
  10 + def self.down
  11 + remove_column :article_versions, :followers_count
  12 + remove_column :articles, :followers_count
  13 + end
  14 +
  15 +end
... ...
test/fixtures/article_followers.yml
... ... @@ -1,11 +0,0 @@
1   -# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
2   -
3   -one:
4   - person_id: 1
5   - article_id: 1
6   - since: 2015-06-16 17:02:01
7   -
8   -two:
9   - person_id: 1
10   - article_id: 1
11   - since: 2015-06-16 17:02:01
test/unit/article_test.rb
... ... @@ -2167,4 +2167,21 @@ class ArticleTest &lt; ActiveSupport::TestCase
2167 2167 article.destroy
2168 2168 end
2169 2169  
  2170 + should "increment followers count when a person follow an article" do
  2171 + a = fast_create(Article)
  2172 + p = fast_create(Person)
  2173 + assert_difference "a.reload.followers_count" do
  2174 + a.person_followers << p
  2175 + end
  2176 + end
  2177 +
  2178 + should "decrement followers count when a person unfollow an article" do
  2179 + p = fast_create(Person)
  2180 + a = fast_create(Article, :profile_id => p)
  2181 + a.person_followers << p
  2182 + assert_difference "a.reload.followers_count", -1 do
  2183 + a.person_followers.destroy_all
  2184 + end
  2185 + end
  2186 +
2170 2187 end
... ...