diff --git a/app/models/comment.rb b/app/models/comment.rb
index 2f69138d7..dca894b7c 100644
--- a/app/models/comment.rb
+++ b/app/models/comment.rb
@@ -49,7 +49,15 @@ class Comment < ActiveRecord::Base
end
def total_votes
- votes_for.size
+ cached_votes_total
+ end
+
+ def total_likes
+ cached_votes_up
+ end
+
+ def total_dislikes
+ cached_votes_down
end
def not_visible?
diff --git a/app/models/debate.rb b/app/models/debate.rb
index c20245e85..7b43bc71c 100644
--- a/app/models/debate.rb
+++ b/app/models/debate.rb
@@ -40,15 +40,15 @@ class Debate < ActiveRecord::Base
end
def likes
- get_likes.size
+ cached_votes_up
end
def dislikes
- get_dislikes.size
+ cached_votes_down
end
def total_votes
- votes_for.size
+ cached_votes_total
end
def editable?
diff --git a/app/views/comments/_votes.html.erb b/app/views/comments/_votes.html.erb
index 73efa56ba..d7af65bff 100644
--- a/app/views/comments/_votes.html.erb
+++ b/app/views/comments/_votes.html.erb
@@ -1,5 +1,4 @@
-
<%= t('debates.comment.votes', count: comment.total_votes) %>
|
@@ -8,7 +7,7 @@
method: "post", remote: true do %>
<% end %>
- <%= comment.get_likes.size %>
+ <%= comment.total_likes %>
@@ -16,5 +15,5 @@
method: "post", remote: true do %>
<% end %>
- <%= comment.get_dislikes.size %>
+ <%= comment.total_dislikes %>
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 857abb1b8..322cf585f 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -61,7 +61,6 @@ en:
zero: No votes
one: 1 vote
other: "%{count} votes"
- votes_weighted_score: "Total: %{score}"
form:
debate_title: Debate title
title_instructions: "SBe clear and precise with the title, but make it informative"
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 2ac4f0d9f..5c21c039e 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -61,7 +61,6 @@ es:
zero: Sin votos
one: 1 voto
other: "%{count} votos"
- votes_weighted_score: "Total: %{score}"
form:
debate_title: Título del debate
title_instructions: "Sé claro y conciso a la hora de poner un título, pero recuerda que debe explicar bien tu idea, ¡es tu carta de entrada!"
diff --git a/db/migrate/20150825124821_adds_votable_cache_field_to_comments.rb b/db/migrate/20150825124821_adds_votable_cache_field_to_comments.rb
new file mode 100644
index 000000000..e2da7e12f
--- /dev/null
+++ b/db/migrate/20150825124821_adds_votable_cache_field_to_comments.rb
@@ -0,0 +1,11 @@
+class AddsVotableCacheFieldToComments < ActiveRecord::Migration
+ def change
+ add_column :comments, :cached_votes_total, :integer, default: 0
+ add_column :comments, :cached_votes_up, :integer, default: 0
+ add_column :comments, :cached_votes_down, :integer, default: 0
+
+ add_index :comments, :cached_votes_total
+ add_index :comments, :cached_votes_up
+ add_index :comments, :cached_votes_down
+ end
+end
diff --git a/db/migrate/20150825124827_adds_votable_cache_field_to_debates.rb b/db/migrate/20150825124827_adds_votable_cache_field_to_debates.rb
new file mode 100644
index 000000000..07df8cf22
--- /dev/null
+++ b/db/migrate/20150825124827_adds_votable_cache_field_to_debates.rb
@@ -0,0 +1,11 @@
+class AddsVotableCacheFieldToDebates < ActiveRecord::Migration
+ def change
+ add_column :debates, :cached_votes_total, :integer, default: 0
+ add_column :debates, :cached_votes_up, :integer, default: 0
+ add_column :debates, :cached_votes_down, :integer, default: 0
+
+ add_index :debates, :cached_votes_total
+ add_index :debates, :cached_votes_up
+ add_index :debates, :cached_votes_down
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 7633cda01..783e3dbea 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -54,8 +54,14 @@ ActiveRecord::Schema.define(version: 20150826112411) do
t.datetime "archived_at"
t.integer "moderator_id"
t.integer "administrator_id"
+ t.integer "cached_votes_total", default: 0
+ t.integer "cached_votes_up", default: 0
+ t.integer "cached_votes_down", default: 0
end
+ add_index "comments", ["cached_votes_down"], name: "index_comments_on_cached_votes_down", using: :btree
+ add_index "comments", ["cached_votes_total"], name: "index_comments_on_cached_votes_total", using: :btree
+ add_index "comments", ["cached_votes_up"], name: "index_comments_on_cached_votes_up", using: :btree
add_index "comments", ["commentable_id", "commentable_type"], name: "index_comments_on_commentable_id_and_commentable_type", using: :btree
add_index "comments", ["hidden_at"], name: "index_comments_on_hidden_at", using: :btree
add_index "comments", ["user_id"], name: "index_comments_on_user_id", using: :btree
@@ -70,9 +76,15 @@ ActiveRecord::Schema.define(version: 20150826112411) do
t.datetime "hidden_at"
t.datetime "flagged_as_inappropiate_at"
t.integer "inappropiate_flags_count", default: 0
+ t.integer "cached_votes_total", default: 0
+ t.integer "cached_votes_up", default: 0
+ t.integer "cached_votes_down", default: 0
t.datetime "archived_at"
end
+ add_index "debates", ["cached_votes_down"], name: "index_debates_on_cached_votes_down", using: :btree
+ add_index "debates", ["cached_votes_total"], name: "index_debates_on_cached_votes_total", using: :btree
+ add_index "debates", ["cached_votes_up"], name: "index_debates_on_cached_votes_up", using: :btree
add_index "debates", ["hidden_at"], name: "index_debates_on_hidden_at", using: :btree
create_table "identities", force: :cascade do |t|
diff --git a/spec/factories.rb b/spec/factories.rb
index 43a1bce85..ded2e20a0 100644
--- a/spec/factories.rb
+++ b/spec/factories.rb
@@ -37,6 +37,9 @@ FactoryGirl.define do
association :votable, factory: :debate
association :voter, factory: :user
vote_flag true
+ after(:create) do |vote, _|
+ vote.votable.update_cached_votes
+ end
end
factory :comment do