Angular POST请求未正确格式化

时间:2015-07-11 05:03:56

标签: angularjs ruby-on-rails-4

我有一个非常简单的角形,看起来像这样:

<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):

这是奇怪的事情。我有相同的代码与复制和粘贴的表单和函数,以正确的格式为我的rails后端发送数据,这将是:

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

字段不同但代码字面相同。为什么一个工作而另一个不工作,我该如何解决?

更新

这似乎是后端的命名问题,所以请求没问题。如果我从:

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

它有效。它似乎不喜欢模型名称与其中一个属性相同。

1 个答案:

答案 0 :(得分:1)

问题不在于请求,而在于我的rails后端处理请求的方式。因为模型名称也是其中一个列的名称,它变得混乱,并且不会将请求转换为正确的格式以使其通过强大的参数。

解决方案是更改列名称。在那之后,一切都很好。