caching comment counts

This commit is contained in:
shlok007 2016-12-29 03:17:33 -05:00 committed by Shlok Srivastava
parent 89840d0bab
commit 9c6286182e
5 changed files with 36 additions and 2 deletions

View file

@ -8,7 +8,7 @@ class Comment < ActiveRecord::Base
# want user to vote on the quality of comments.
#acts_as_votable
belongs_to :commentable, polymorphic: true
belongs_to :commentable, counter_cache: true, polymorphic: true
# NOTE: Comments belong to a user
belongs_to :user

View file

@ -184,4 +184,4 @@
%ul.dropdown-menu{ role: 'menu' }
= render 'change_state_dropdown', event: event
%td.text-center
= link_to "#{event.comment_threads.count}", admin_conference_program_event_path(@conference.short_title, event), anchor: 'comments-div'
= link_to "#{event.comments_count}", admin_conference_program_event_path(@conference.short_title, event), anchor: 'comments-div'

View file

@ -0,0 +1,10 @@
class AddCommentsCountToEvents < ActiveRecord::Migration
def change
add_column :events, :comments_count, :integer, default: 0, null: false
Event.find_each do |event|
comments_count = event.comment_threads.count
event.update_attribute(:comments_count, comments_count) unless comments_count.zero?
end
end
end

View file

@ -242,6 +242,7 @@ ActiveRecord::Schema.define(version: 20170629232817) do
t.boolean "is_highlight", default: false
t.integer "program_id"
t.integer "max_attendees"
t.integer "comments_count", default: 0, null: false
end
create_table "events_registrations", force: :cascade do |t|

View file

@ -98,6 +98,29 @@ describe Event do
end
end
describe '#comments_count' do
context 'has a valid counter cache' do
before do
create(:comment, commentable: event)
end
it 'successfully increments comments_count' do
expected = expect do
create(:comment, commentable: event)
end
expected.to change { event.comments_count }.by(1)
end
it 'successfully decrements comments_count' do
expected = expect do
event.comment_threads.last.destroy
event.reload
end
expected.to change { event.comments_count }.by(-1)
end
end
end
describe 'scope ' do
context 'confirmed' do
it 'returns only confirmed events' do