diff --git a/app/controllers/debates_controller.rb b/app/controllers/debates_controller.rb index 713e8b97d..a395f9c5e 100644 --- a/app/controllers/debates_controller.rb +++ b/app/controllers/debates_controller.rb @@ -7,13 +7,16 @@ class DebatesController < ApplicationController def index if params[:tag] @debates = Debate.tagged_with(params[:tag]).order("created_at DESC") + set_voted_values @debates.map(&:id) else @debates = Debate.all.order("created_at DESC") + set_voted_values @debates.map(&:id) @featured_debates = @debates.to_a.shift(3) end end def show + set_voted_values [@debate.id] end def new @@ -40,6 +43,7 @@ class DebatesController < ApplicationController def vote @debate.vote_by(voter: current_user, vote: params[:value]) + set_voted_values [@debate.id] end @@ -55,4 +59,8 @@ class DebatesController < ApplicationController def validate_ownership raise ActiveRecord::RecordNotFound unless @debate.editable_by?(current_user) end + + def set_voted_values(debates_ids) + @voted_values = current_user ? current_user.votes_on_debates(debates_ids) : {} + end end diff --git a/app/helpers/votes_helper.rb b/app/helpers/votes_helper.rb new file mode 100644 index 000000000..11d39e898 --- /dev/null +++ b/app/helpers/votes_helper.rb @@ -0,0 +1,14 @@ +module VotesHelper + + def css_classes_for_debate_vote(voted_values, debate) + case voted_values[debate.id] + when true + {in_favor: "voted", against: "no-voted"} + when false + {in_favor: "no-voted", against: "voted"} + else + {in_favor: "", against: ""} + end + end + +end \ No newline at end of file diff --git a/app/models/user.rb b/app/models/user.rb index 2c0c2756b..17573eaa7 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -2,6 +2,8 @@ class User < ActiveRecord::Base devise :database_authenticatable, :registerable, :confirmable, :recoverable, :rememberable, :trackable, :validatable + acts_as_voter + validates :first_name, presence: true, unless: :use_nickname? validates :last_name, presence: true, unless: :use_nickname? validates :nickname, presence: true, if: :use_nickname? @@ -9,4 +11,12 @@ class User < ActiveRecord::Base def name use_nickname? ? nickname : "#{first_name} #{last_name}" end + + def votes_on_debates(debates_ids = []) + debates_ids = debates_ids.flatten.compact.uniq + return {} if debates_ids.empty? + + voted = votes.where("votable_type = ? AND votable_id IN (?)", "Debate", debates_ids) + voted.each_with_object({}){ |v,_| _[v.votable_id] = v.vote_flag } + end end diff --git a/app/views/debates/_featured_debate.html.erb b/app/views/debates/_featured_debate.html.erb index 708053a19..602b3d603 100644 --- a/app/views/debates/_featured_debate.html.erb +++ b/app/views/debates/_featured_debate.html.erb @@ -1,5 +1,5 @@
-