Commit 0490f6b78d0d29f5d51da9c96fd387d7c2a86496
1 parent
f408721c
Exists in
master
and in
1 other branch
lock question before updating choice
Showing
1 changed file
with
6 additions
and
3 deletions
Show diff stats
app/controllers/choices_controller.rb
| @@ -88,9 +88,12 @@ class ChoicesController < InheritedResources::Base | @@ -88,9 +88,12 @@ class ChoicesController < InheritedResources::Base | ||
| 88 | # prevent AttributeNotFound error and only update actual Choice columns, since we add extra information in 'show' method | 88 | # prevent AttributeNotFound error and only update actual Choice columns, since we add extra information in 'show' method |
| 89 | choice_attributes = Choice.new.attribute_names | 89 | choice_attributes = Choice.new.attribute_names |
| 90 | params[:choice] = params[:choice].delete_if {|key, value| !choice_attributes.include?(key)} | 90 | params[:choice] = params[:choice].delete_if {|key, value| !choice_attributes.include?(key)} |
| 91 | - @question = current_user.questions.find(params[:question_id]) | ||
| 92 | - @choice = @question.choices.find(params[:id]) | ||
| 93 | - update! | 91 | + Choice.transaction do |
| 92 | + # lock question since we'll need a lock on it later in Choice.update_questions_counter | ||
| 93 | + @question = current_user.questions.find(params[:question_id], :lock => true) | ||
| 94 | + @choice = @question.choices.find(params[:id]) | ||
| 95 | + update! | ||
| 96 | + end | ||
| 94 | end | 97 | end |
| 95 | 98 | ||
| 96 | def show | 99 | def show |