Method: SurveyorController#update

Defined in:
app/controllers/surveyor_controller.rb

#updateObject



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'app/controllers/surveyor_controller.rb', line 68

def update
  saved = nil
  ActiveRecord::Base.transaction do 
    if @response_set = ResponseSet.find_by_access_code(params[:response_set_code], :include => {:responses => :answer},:lock => true)
      @response_set.current_section_id = params[:current_section_id]
    else
      flash[:notice] = "Unable to find your responses to the survey"
      redirect_to(available_surveys_path) and return
    end

    if params[:responses] or params[:response_groups]
      @response_set.clear_responses
      saved = @response_set.update_attributes(:response_attributes => (params[:responses] || {}).dup ,
                                              :response_group_attributes => (params[:response_groups] || {}).dup) #copy (dup) to preserve params because we manipulate params in the response_set methods
      if (saved && params[:finish])
        @response_set.complete!
        saved = @response_set.save!
      end
    end
  end
  respond_to do |format|
    format.html do
      if saved && params[:finish]
        flash[:notice] = "Completed survey"
        redirect_to surveyor_default(:finish)
      else
        flash[:notice] = "Unable to update survey" if !saved #and !saved.nil? # saved.nil? is true if there are no questions on the page (i.e. if it only contains a label)
        redirect_to :action => "edit", :anchor => anchor_from(params[:section]), :params => {:section => section_id_from(params[:section])}
      end
    end
    # No redirect needed if we're talking to the page via json
    format.js do
#        render :json => @response_set.all_dependencies.to_json
      render :json => @response_set.all_things_hash.to_json
    end
  end
end