2015-07-11 142 views
0

我有一個很簡單的角形式,看起來像這樣:角POST請求未格式化正確

<form ng-submit="createNewQuestion()" name="createNewQuestionForm"> 
    <div class="form-group"> 
    <textarea class="form-control" rows="3" ng-model="question.question" placeholder="Add a question here."></textarea> 
    </div> 
    <div class="form-group"> 
    <textarea class="form-control" rows="3" ng-model="question.answer" placeholder="Add the answer here."></textarea> 
    </div> 
    <button type="submit" class="btn btn-default">Next</button> 
</form> 

它提交到控制器中的CreateNewQuestion()函數,它看起來像這樣:

$scope.createNewQuestion = function() { 
    $scope.question.droplet_id = $scope.createdDroplet.id; //add droplet_id to form data 
    question.create($scope.question).success(function(question) { 
    $scope.questions.push(question); //return the question and put it in the helps variable 
    $scope.question = {}; // clear form 
    }); 
}; 

這就要求廠家進行POST請求,看起來像這樣:

app.factory('question', ['$http', function($http) { 
    return { 
    create: function (question) { 
     return $http.post('/questions/', question) 
    } 
    } 
}]); 

請求得到提交時提交,但參數格式不正確。日誌看起來像這樣:

Processing by QuestionsController#create as HTML 
    Parameters: {"question"=>"some_question", "answer"=>"some_answer", "droplet_id"=>785} 
Completed 500 Internal Server Error in 3ms 

NoMethodError (undefined method `permit' for "vhjkhfjhgfjhg":String): 

這是奇怪的事情。我有複製並粘貼形式和功能對數據進行發送的正確格式爲我的導軌的後端,這將是相同的代碼:

Parameters: {"question"=>"question", "answer"=>"answer", "drop_id"=>485, "question"=>{"question"=>"question", "answer"=>"answer", "drop_id"=>485}} 

的領域不同,但代碼是字面上相同。爲什麼一個人在工作而另一個人不在,我該如何解決?

更新

這似乎是在後端的命名問題,因此請求是好的。如果我刪除要求(:問題):

params.require(:question).permit(:question, :answer, :droplet_id, :ordering) 

它的工作原理。它似乎不喜歡模型名稱與其中一個屬性相同。

回答

1

問題不在於請求,而在於我的rails後端處理請求的方式。因爲模型名稱也是其中一個列的名稱,所以它變得混亂,並且不會將請求轉換爲正確的格式,從而通過強大的參數來獲取它。

解決方案是更改列名稱。之後,一切正常。