Commit 986291aeb2357b01a9e79d6ff02bfde27f898607
1 parent
6aa016fd
Exists in
master
and in
1 other branch
Refactored vote model to get better statistics
Showing
7 changed files
with
47 additions
and
13 deletions
Show diff stats
app/models/choice.rb
| ... | ... | @@ -9,7 +9,7 @@ class Choice < ActiveRecord::Base |
| 9 | 9 | validates_presence_of :question, :on => :create, :message => "can't be blank" |
| 10 | 10 | #validates_length_of :item, :maximum => 140 |
| 11 | 11 | |
| 12 | - has_many :votes, :as => :voteable | |
| 12 | + has_many :votes | |
| 13 | 13 | has_many :prompts_on_the_left, :class_name => "Prompt", :foreign_key => "left_choice_id" |
| 14 | 14 | has_many :prompts_on_the_right, :class_name => "Prompt", :foreign_key => "right_choice_id" |
| 15 | 15 | named_scope :active, :conditions => { :active => true } | ... | ... |
app/models/prompt.rb
app/models/question.rb
app/models/visitor.rb
| ... | ... | @@ -15,26 +15,30 @@ class Visitor < ActiveRecord::Base |
| 15 | 15 | |
| 16 | 16 | def vote_for!(prompt, ordinality) |
| 17 | 17 | # Why are there three vote objects created for every actual 'vote'? Why not have each vote have a questionid, promptid and choiceid? |
| 18 | - question_vote = votes.create!(:voteable_id => prompt.question_id, :voteable_type => "Question") | |
| 19 | - logger.info "Visitor: #{self.inspect} voted for Question: #{prompt.question_id}" | |
| 18 | +# question_vote = votes.create!(:voteable_id => prompt.question_id, :voteable_type => "Question") | |
| 19 | +# logger.info "Visitor: #{self.inspect} voted for Question: #{prompt.question_id}" | |
| 20 | 20 | |
| 21 | 21 | |
| 22 | - choices = prompt.choices | |
| 23 | - choice = choices[ordinality] #we need to guarantee that the choices are in the right order (by position) | |
| 24 | - prompt_vote = votes.create!(:voteable => prompt) | |
| 25 | - logger.info "Visitor: voted for Prompt: #{prompt.id.to_s}" | |
| 22 | +# prompt_vote = votes.create!(:voteable => prompt) | |
| 23 | +# logger.info "Visitor: voted for Prompt: #{prompt.id.to_s}" | |
| 26 | 24 | # @click = Click.new(:what_was_clicked => "on the API level, inside visitor#vote_for! with prompt id #{prompt.id}, ordinality #{ordinality.to_s}, choice: #{choice.item.data} (id: #{choice.id})") |
| 27 | 25 | # @click.save! |
| 28 | 26 | |
| 29 | - choice_vote = votes.create!(:voteable => choice) | |
| 27 | + choices = prompt.choices | |
| 28 | + choice = choices[ordinality] #we need to guarantee that the choices are in the right order (by position) | |
| 29 | + other_choices = choices - [choice] | |
| 30 | + other_choices.each {|c| c.lose! } | |
| 31 | + | |
| 32 | + loser_choice = other_choices.first | |
| 33 | + votes.create!(:question_id => prompt.question_id, :prompt_id => prompt_id, :voter_id=> self.id, :choice_id => choice.id, :loser_id => loser_choice.id) | |
| 34 | + | |
| 35 | +# choice_vote = votes.create!(:voteable => choice) | |
| 30 | 36 | # logger.info "Visitor: voted for Prompt: #{prompt.id.to_s} for choice #{choice.item.data}" |
| 31 | 37 | # choice.save! |
| 32 | 38 | # choice.score = choice.compute_score |
| 33 | 39 | # logger.info "Just computed the score for that choice and it's apparently #{choice.score}" |
| 34 | 40 | # choice.save! |
| 35 | 41 | #logger.info "Saved. That choice's score is still #{choice.score}" |
| 36 | - other_choices = choices - [choice] | |
| 37 | - other_choices.each {|c| c.lose! } | |
| 38 | 42 | end |
| 39 | 43 | |
| 40 | 44 | def skip!(prompt) | ... | ... |
app/models/vote.rb
| 1 | 1 | class Vote < ActiveRecord::Base |
| 2 | - belongs_to :voteable, :polymorphic => true, :counter_cache => true | |
| 2 | +# belongs_to :voteable, :polymorphic => true, :counter_cache => true | |
| 3 | 3 | belongs_to :voter, :class_name => "Visitor", :foreign_key => "voter_id" |
| 4 | + belongs_to :question, :counter_cache => true | |
| 5 | + belongs_to :prompt, :counter_cache => true | |
| 6 | + belongs_to :choice, :counter_cache => true | |
| 4 | 7 | end | ... | ... |
db/migrate/20100215170926_create_refactored_vote_model.rb
0 → 100644
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +class CreateRefactoredVoteModel < ActiveRecord::Migration | |
| 2 | + def self.up | |
| 3 | + create_table :votes do |table| | |
| 4 | + table.text :tracking | |
| 5 | + table.integer :site_id | |
| 6 | + table.integer :voter_id | |
| 7 | + table.integer :question_id | |
| 8 | + table.integer :prompt_id | |
| 9 | + table.integer :choice_id | |
| 10 | + table.integer :loser_choice_id | |
| 11 | + table.timestamps | |
| 12 | + end | |
| 13 | + end | |
| 14 | + | |
| 15 | + def self.down | |
| 16 | + drop_table :votes | |
| 17 | + end | |
| 18 | +end | ... | ... |