Commit 119bad2239ae82841810b9a84f1c85c686912b8e
1 parent
6a94e874
Exists in
master
and in
1 other branch
optimize creation of seed ideas
we have some callbacks on choice creation, that we don't need to run after every single choice when creating them in a batch. Instead we can just make sure the last choice in the batch runs the required callbacks.
Showing
2 changed files
with
13 additions
and
6 deletions
Show diff stats
app/models/choice.rb
| @@ -26,17 +26,22 @@ class Choice < ActiveRecord::Base | @@ -26,17 +26,22 @@ class Choice < ActiveRecord::Base | ||
| 26 | 26 | ||
| 27 | attr_protected :prompts_count, :wins, :losses, :score, :prompts_on_the_right_count, :prompts_on_the_left_count | 27 | attr_protected :prompts_count, :wins, :losses, :score, :prompts_on_the_right_count, :prompts_on_the_left_count |
| 28 | attr_readonly :question_id | 28 | attr_readonly :question_id |
| 29 | + attr_accessor :part_of_batch_create | ||
| 29 | 30 | ||
| 30 | def update_questions_counter | 31 | def update_questions_counter |
| 31 | - self.question.update_attribute(:inactive_choices_count, self.question.choices.inactive.length) | 32 | + unless part_of_batch_create |
| 33 | + self.question.update_attribute(:inactive_choices_count, self.question.choices.inactive.length) | ||
| 34 | + end | ||
| 32 | end | 35 | end |
| 33 | 36 | ||
| 34 | # if changing a choice to active, we want to regenerate prompts | 37 | # if changing a choice to active, we want to regenerate prompts |
| 35 | def update_prompt_queue | 38 | def update_prompt_queue |
| 36 | - if self.changed.include?('active') && self.active? | ||
| 37 | - self.question.mark_prompt_queue_for_refill | ||
| 38 | - if self.question.choices.size - self.question.inactive_choices_count > 1 && self.question.uses_catchup? | ||
| 39 | - self.question.send_later :add_prompt_to_queue | 39 | + unless part_of_batch_create |
| 40 | + if self.changed.include?('active') && self.active? | ||
| 41 | + self.question.mark_prompt_queue_for_refill | ||
| 42 | + if self.question.choices.size - self.question.inactive_choices_count > 1 && self.question.uses_catchup? | ||
| 43 | + self.question.send_later :add_prompt_to_queue | ||
| 44 | + end | ||
| 40 | end | 45 | end |
| 41 | end | 46 | end |
| 42 | end | 47 | end |
app/models/question.rb
| @@ -45,7 +45,9 @@ class Question < ActiveRecord::Base | @@ -45,7 +45,9 @@ class Question < ActiveRecord::Base | ||
| 45 | def create_choices_from_ideas | 45 | def create_choices_from_ideas |
| 46 | if ideas && ideas.any? | 46 | if ideas && ideas.any? |
| 47 | ideas.each do |idea| | 47 | ideas.each do |idea| |
| 48 | - choices.create!(:creator => self.creator, :active => true, :data => idea.squish.strip) | 48 | + # all but last is considered part of batch create, so the |
| 49 | + # last one will fire things that only need to be run at the end | ||
| 50 | + choices.create!(:creator => self.creator, :active => true, :data => idea.squish.strip, :part_of_batch_create => idea != ideas.last, :question => self) | ||
| 49 | end | 51 | end |
| 50 | end | 52 | end |
| 51 | end | 53 | end |