Commit c1b783c7bd7dfe040570a86d255cd5cda7e4a0b1
1 parent
d0472735
Exists in
staging
and in
7 other branches
Add counter cache for article followers
Showing
4 changed files
with
35 additions
and
12 deletions
Show diff stats
app/models/article_follower.rb
| 1 | class ArticleFollower < ActiveRecord::Base | 1 | class ArticleFollower < ActiveRecord::Base |
| 2 | + | ||
| 2 | attr_accessible :article_id, :person_id, :since | 3 | attr_accessible :article_id, :person_id, :since |
| 3 | - belongs_to :article | 4 | + belongs_to :article, :counter_cache => :followers_count |
| 4 | belongs_to :person | 5 | belongs_to :person |
| 6 | + | ||
| 5 | end | 7 | end |
db/migrate/20150909091347_add_followers_count_to_article.rb
0 → 100644
| @@ -0,0 +1,15 @@ | @@ -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
test/unit/article_test.rb
| @@ -2167,4 +2167,21 @@ class ArticleTest < ActiveSupport::TestCase | @@ -2167,4 +2167,21 @@ class ArticleTest < ActiveSupport::TestCase | ||
| 2167 | article.destroy | 2167 | article.destroy |
| 2168 | end | 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 | end | 2187 | end |