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 | ... | ... |