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 | 26 | |
| 27 | 27 | attr_protected :prompts_count, :wins, :losses, :score, :prompts_on_the_right_count, :prompts_on_the_left_count |
| 28 | 28 | attr_readonly :question_id |
| 29 | + attr_accessor :part_of_batch_create | |
| 29 | 30 | |
| 30 | 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 | 35 | end |
| 33 | 36 | |
| 34 | 37 | # if changing a choice to active, we want to regenerate prompts |
| 35 | 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 | 45 | end |
| 41 | 46 | end |
| 42 | 47 | end | ... | ... |
app/models/question.rb
| ... | ... | @@ -45,7 +45,9 @@ class Question < ActiveRecord::Base |
| 45 | 45 | def create_choices_from_ideas |
| 46 | 46 | if ideas && ideas.any? |
| 47 | 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 | 51 | end |
| 50 | 52 | end |
| 51 | 53 | end | ... | ... |