Commit 457c9f59eaf5b20bfe69c007d55722c1e93ef585
1 parent
2c6eb234
Exists in
master
and in
29 other branches
blog-page: use article comments_count instead of querying the database for it
Was necessary to create a spam_comments_count in order to get the correct count without considering spams. ActionItem3201
Showing
6 changed files
with
23 additions
and
6 deletions
Show diff stats
app/helpers/content_viewer_helper.rb
@@ -10,7 +10,7 @@ module ContentViewerHelper | @@ -10,7 +10,7 @@ module ContentViewerHelper | ||
10 | end | 10 | end |
11 | 11 | ||
12 | def number_of_comments(article) | 12 | def number_of_comments(article) |
13 | - display_number_of_comments(article.comments.without_spam.count) | 13 | + display_number_of_comments(article.comments_count - article.spam_comments_count) |
14 | end | 14 | end |
15 | 15 | ||
16 | def article_title(article, args = {}) | 16 | def article_title(article, args = {}) |
app/models/article.rb
@@ -450,9 +450,9 @@ class Article < ActiveRecord::Base | @@ -450,9 +450,9 @@ class Article < ActiveRecord::Base | ||
450 | end | 450 | end |
451 | 451 | ||
452 | named_scope :published, :conditions => { :published => true } | 452 | named_scope :published, :conditions => { :published => true } |
453 | - named_scope :folders, lambda {|profile|{:conditions => { :type => profile.folder_types} }} | ||
454 | - named_scope :no_folders, lambda {|profile|{:conditions => ['type NOT IN (?)', profile.folder_types]}} | ||
455 | - named_scope :galleries, :conditions => { :type => 'Gallery' } | 453 | + named_scope :folders, lambda {|profile|{:conditions => ['articles.type IN (?)', profile.folder_types] }} |
454 | + named_scope :no_folders, lambda {|profile|{:conditions => ['articles.type NOT IN (?)', profile.folder_types]}} | ||
455 | + named_scope :galleries, :conditions => [ "articles.type IN ('Gallery')" ] | ||
456 | named_scope :images, :conditions => { :is_image => true } | 456 | named_scope :images, :conditions => { :is_image => true } |
457 | named_scope :text_articles, :conditions => [ 'articles.type IN (?)', text_article_types ] | 457 | named_scope :text_articles, :conditions => [ 'articles.type IN (?)', text_article_types ] |
458 | named_scope :with_types, lambda { |types| { :conditions => [ 'articles.type IN (?)', types ] } } | 458 | named_scope :with_types, lambda { |types| { :conditions => [ 'articles.type IN (?)', types ] } } |
app/models/comment.rb
@@ -107,14 +107,17 @@ class Comment < ActiveRecord::Base | @@ -107,14 +107,17 @@ class Comment < ActiveRecord::Base | ||
107 | include Noosfero::Plugin::HotSpot | 107 | include Noosfero::Plugin::HotSpot |
108 | 108 | ||
109 | include Spammable | 109 | include Spammable |
110 | + include CacheCounterHelper | ||
110 | 111 | ||
111 | def after_spam! | 112 | def after_spam! |
112 | SpammerLogger.log(ip_address, self) | 113 | SpammerLogger.log(ip_address, self) |
113 | Delayed::Job.enqueue(CommentHandler.new(self.id, :marked_as_spam)) | 114 | Delayed::Job.enqueue(CommentHandler.new(self.id, :marked_as_spam)) |
115 | + update_cache_counter(:spam_comments_count, source, 1) if source.kind_of?(Article) | ||
114 | end | 116 | end |
115 | 117 | ||
116 | def after_ham! | 118 | def after_ham! |
117 | Delayed::Job.enqueue(CommentHandler.new(self.id, :marked_as_ham)) | 119 | Delayed::Job.enqueue(CommentHandler.new(self.id, :marked_as_ham)) |
120 | + update_cache_counter(:spam_comments_count, source, -1) if source.kind_of?(Article) | ||
118 | end | 121 | end |
119 | 122 | ||
120 | def verify_and_notify | 123 | def verify_and_notify |
db/migrate/20140709212646_add_spam_comments_counter_cache_to_articles.rb
0 → 100644
@@ -0,0 +1,12 @@ | @@ -0,0 +1,12 @@ | ||
1 | +class AddSpamCommentsCounterCacheToArticles < ActiveRecord::Migration | ||
2 | + def self.up | ||
3 | + add_column :articles, :spam_comments_count, :integer, :default => 0 | ||
4 | + add_column :article_versions, :spam_comments_count, :integer, :default => 0 | ||
5 | + execute "update articles set spam_comments_count = (select count(*) from comments where comments.source_id = articles.id and comments.source_type = 'Article' and comments.spam = 't');" | ||
6 | + end | ||
7 | + | ||
8 | + def self.down | ||
9 | + remove_column :articles, :spam_comments_count | ||
10 | + remove_column :article_versions, :spam_comments_count | ||
11 | + end | ||
12 | +end |
db/schema.rb
@@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
9 | # | 9 | # |
10 | # It's strongly recommended to check this file into your version control system. | 10 | # It's strongly recommended to check this file into your version control system. |
11 | 11 | ||
12 | -ActiveRecord::Schema.define(:version => 20140505131703) do | 12 | +ActiveRecord::Schema.define(:version => 20140709212646) do |
13 | 13 | ||
14 | create_table "abuse_reports", :force => true do |t| | 14 | create_table "abuse_reports", :force => true do |t| |
15 | t.integer "reporter_id" | 15 | t.integer "reporter_id" |
@@ -93,6 +93,7 @@ ActiveRecord::Schema.define(:version => 20140505131703) do | @@ -93,6 +93,7 @@ ActiveRecord::Schema.define(:version => 20140505131703) do | ||
93 | t.integer "license_id" | 93 | t.integer "license_id" |
94 | t.integer "image_id" | 94 | t.integer "image_id" |
95 | t.integer "position" | 95 | t.integer "position" |
96 | + t.integer "spam_comments_count", :default => 0 | ||
96 | end | 97 | end |
97 | 98 | ||
98 | add_index "article_versions", ["article_id"], :name => "index_article_versions_on_article_id" | 99 | add_index "article_versions", ["article_id"], :name => "index_article_versions_on_article_id" |
@@ -138,6 +139,7 @@ ActiveRecord::Schema.define(:version => 20140505131703) do | @@ -138,6 +139,7 @@ ActiveRecord::Schema.define(:version => 20140505131703) do | ||
138 | t.integer "license_id" | 139 | t.integer "license_id" |
139 | t.integer "image_id" | 140 | t.integer "image_id" |
140 | t.integer "position" | 141 | t.integer "position" |
142 | + t.integer "spam_comments_count", :default => 0 | ||
141 | end | 143 | end |
142 | 144 | ||
143 | add_index "articles", ["comments_count"], :name => "index_articles_on_comments_count" | 145 | add_index "articles", ["comments_count"], :name => "index_articles_on_comments_count" |
test/unit/article_test.rb
@@ -1824,7 +1824,7 @@ class ArticleTest < ActiveSupport::TestCase | @@ -1824,7 +1824,7 @@ class ArticleTest < ActiveSupport::TestCase | ||
1824 | end | 1824 | end |
1825 | end | 1825 | end |
1826 | 1826 | ||
1827 | - should 'return articles with specific types' do | 1827 | + should 'return articles with specific types' do |
1828 | Article.delete_all | 1828 | Article.delete_all |
1829 | 1829 | ||
1830 | c1 = fast_create(TinyMceArticle, :name => 'Testing article 1', :body => 'Article body 1', :profile_id => profile.id) | 1830 | c1 = fast_create(TinyMceArticle, :name => 'Testing article 1', :body => 'Article body 1', :profile_id => profile.id) |