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