/**
  * PUT request, we're using it here to mean 'replace the record with'
  */
 public function update($id)
 {
     $v = Validator::make(Input::all(), ['name' => 'required|string', 'questions' => 'array', 'taggable' => 'array']);
     if ($v->fails()) {
         return Response::json($v->errors(), 400);
     }
     $questionnaire = Questionnaire::find($id);
     if (is_null($questionnaire)) {
         return Response::json(['error' => 'no such questionnaire found'], 404);
     }
     $questionIds = $questionnaire->questions->lists('id');
     Question::destroy($questionIds);
     if (Input::has('questions')) {
         foreach (Input::get('questions') as $question) {
             Question::create(['question' => $question, 'questionnaire_id' => $questionnaire->id]);
         }
     }
     $tagListIds = $questionnaire->tagLists->lists('id');
     $questionnaire->tagLists()->detach($tagListIds);
     if (Input::has('taggable')) {
         foreach (Input::get('taggable') as $tagList) {
             $T = TagList::firstOrNew(['name' => $tagList['name']]);
             $questionnaire->tagLists()->save($T);
             if (!$T->exists) {
                 // it's a new one!
                 $T->save();
             }
         }
     }
     $questionnaire->name = Input::get('name');
     $questionnaire->touch();
     $questionnaire->push();
     // if these are modified they won't be shown...
     $questionnaire->load('tagLists', 'tagLists.tags', 'questions');
     return Response::json($this->reformatTagsAndQuestions($questionnaire), 200);
 }