Commit 5f28f5b43b3040422c02b0b148acdd7f1b430945
1 parent
94dfcc16
Exists in
master
and in
1 other branch
Refactoring preloading code slightly, fixing edge case with deactivated
prompts
Showing
3 changed files
with
27 additions
and
16 deletions
Show diff stats
app/models/appearance.rb
| ... | ... | @@ -2,9 +2,10 @@ class Appearance < ActiveRecord::Base |
| 2 | 2 | belongs_to :voter, :class_name => "Visitor", :foreign_key => 'voter_id' |
| 3 | 3 | belongs_to :prompt |
| 4 | 4 | belongs_to :question |
| 5 | - | |
| 6 | 5 | belongs_to :answerable, :polymorphic => true |
| 7 | 6 | |
| 7 | + default_scope :conditions => {:valid_record => true} | |
| 8 | + | |
| 8 | 9 | def answered? |
| 9 | 10 | !self.answerable_id.nil? |
| 10 | 11 | end | ... | ... |
app/models/question.rb
| ... | ... | @@ -144,13 +144,9 @@ class Question < ActiveRecord::Base |
| 144 | 144 | if params[:with_appearance] && visitor_identifier.present? |
| 145 | 145 | visitor = current_user.visitors.find_or_create_by_identifier(visitor_identifier) |
| 146 | 146 | |
| 147 | - last_appearance = visitor.appearances.find(:first, | |
| 148 | - :conditions => {:question_id => self.id, | |
| 149 | - :answerable_id => nil | |
| 150 | - }, | |
| 151 | - :order => 'id ASC', | |
| 152 | - :limit => 1) | |
| 153 | - if last_appearance.nil?|| last_appearance.answered? || !last_appearance.prompt.active? | |
| 147 | + last_appearance = get_first_unanswered_appearance(visitor) | |
| 148 | + | |
| 149 | + if last_appearance.nil? | |
| 154 | 150 | @prompt = choose_prompt(:algorithm => params[:algorithm]) |
| 155 | 151 | @appearance = current_user.record_appearance(visitor, @prompt) |
| 156 | 152 | else |
| ... | ... | @@ -163,13 +159,8 @@ class Question < ActiveRecord::Base |
| 163 | 159 | num_future = params[:future_prompts][:number].to_i rescue 1 |
| 164 | 160 | num_future.times do |number| |
| 165 | 161 | offset = number + 1 |
| 166 | - last_appearance = visitor.appearances.find(:first, | |
| 167 | - :conditions => {:question_id => self.id, | |
| 168 | - :answerable_id => nil | |
| 169 | - }, | |
| 170 | - :order => 'id ASC', | |
| 171 | - :offset => offset) | |
| 172 | - if last_appearance.nil?|| last_appearance.answered? || !last_appearance.prompt.active? | |
| 162 | + last_appearance = get_first_unanswered_appearance(visitor, offset) | |
| 163 | + if last_appearance.nil? | |
| 173 | 164 | @future_prompt = choose_prompt(:algorithm => params[:algorithm]) |
| 174 | 165 | @future_appearance = current_user.record_appearance(visitor, @future_prompt) |
| 175 | 166 | else |
| ... | ... | @@ -597,6 +588,23 @@ class Question < ActiveRecord::Base |
| 597 | 588 | filename |
| 598 | 589 | end |
| 599 | 590 | |
| 591 | + def get_first_unanswered_appearance(visitor, offset=0) | |
| 592 | + last_appearance = visitor.appearances.find(:first, | |
| 593 | + :conditions => {:question_id => self.id, | |
| 594 | + :answerable_id => nil | |
| 595 | + }, | |
| 596 | + :order => 'id ASC', | |
| 597 | + :offset => offset) | |
| 598 | + if last_appearance && !last_appearance.prompt.active? | |
| 599 | + last_appearance.valid_record = false | |
| 600 | + last_appearance.validity_information = "Deactivated Prompt" | |
| 601 | + last_appearance.save | |
| 602 | + | |
| 603 | + return get_first_unanswered_appearance(visitor) | |
| 604 | + end | |
| 605 | + last_appearance | |
| 606 | + end | |
| 607 | + | |
| 600 | 608 | |
| 601 | 609 | |
| 602 | 610 | end | ... | ... |
db/schema.rb
| ... | ... | @@ -9,7 +9,7 @@ |
| 9 | 9 | # |
| 10 | 10 | # It's strongly recommended to check this file into your version control system. |
| 11 | 11 | |
| 12 | -ActiveRecord::Schema.define(:version => 20100714160406) do | |
| 12 | +ActiveRecord::Schema.define(:version => 20100716121029) do | |
| 13 | 13 | |
| 14 | 14 | create_table "appearances", :force => true do |t| |
| 15 | 15 | t.integer "voter_id" |
| ... | ... | @@ -21,6 +21,8 @@ ActiveRecord::Schema.define(:version => 20100714160406) do |
| 21 | 21 | t.datetime "updated_at" |
| 22 | 22 | t.integer "answerable_id" |
| 23 | 23 | t.string "answerable_type" |
| 24 | + t.boolean "valid_record", :default => true | |
| 25 | + t.string "validity_information" | |
| 24 | 26 | end |
| 25 | 27 | |
| 26 | 28 | add_index "appearances", ["lookup"], :name => "index_appearances_on_lookup" | ... | ... |