Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法更新角度中的对象_Javascript_Ruby On Rails_Angularjs - Fatal编程技术网

Javascript 无法更新角度中的对象

Javascript 无法更新角度中的对象,javascript,ruby-on-rails,angularjs,Javascript,Ruby On Rails,Angularjs,现在,我能够创建对象并通过json api将它们保存到rails数据库中。这是一个简单的待办事项列表应用程序,当我添加一个对象时,它会进入输入字段上方的待办事项列表。我还能够查询索引视图上的所有对象,并列出我的所有todo对象 当我单击每个todo项目旁边的复选框时,它应该将其:done属性更改为true,以便在他们单击clearCompleted函数的Clear按钮后不再显示它 这是我的js代码 angular.module("Todo", ["ngResource"]) function

现在,我能够创建对象并通过json api将它们保存到rails数据库中。这是一个简单的待办事项列表应用程序,当我添加一个对象时,它会进入输入字段上方的待办事项列表。我还能够查询索引视图上的所有对象,并列出我的所有todo对象

当我单击每个todo项目旁边的复选框时,它应该将其:done属性更改为true,以便在他们单击clearCompleted函数的Clear按钮后不再显示它

这是我的js代码

angular.module("Todo", ["ngResource"])

function TodoController($scope, $filter, $resource) {
  Todo = $resource("/todos.json", {id: "@id"}, {update: {method: 'PUT'}})
    $scope.todos = Todo.query()

  $scope.getTotalTodos = function () {
      return $scope.todos.length;
  };

  $scope.clearCompleted = function () {
    Todo.save({done:true})
    $scope.todos = $filter("filter")($scope.todos, {done:false});
};

  $scope.addTodo = function () {
    entry = Todo.save({title:$scope.newTodo.title, importance:$scope.newTodo.importance, description:$scope.newTodo.description, done:false})
    $scope.todos.push(entry);
    $scope.newTodo.title = '';
    $scope.newTodo.importance = '';
    $scope.newTodo.description = '';
  };

}
所发生的事情是,它不是更新数据库中的对象,而是创建一个全新的todo项,并将其属性设置为:done=>true。这是有意义的,因为在clearCompleted函数中,看起来我们正在创建一个对象,而不是更新现有的对象

那么如何更新数据库中的记录呢?

您不应该使用Todo.save{}来更新Todo。正如您所说,它创建了一个新对象

编写如下代码

 Todo = $resource("/todos.json", {id: "@id"}, {'save': {method: 'PUT'}})
 $scope.todos = Todo.query();
    var todo =  todos[0];//A todo that should be updated
    todo.done = true;
    todo.$save();
可能在保存url中需要todo键的参数


您在param中把id放在哪里?您指的是资源方法吗?因为我在跟踪一名铁路司机,所以我把它放在那里了。我们真的是第一个todo吗?还是应该更新todo?当我们点击复选框时,我们正在尝试更改一个属性。看起来保存创建了另一个对象。我将如何更改此项以更新属性。您的服务是RESTfull服务吗?是的。我现在看到的问题是,即使我使用update方法,也会传入正确的参数,但这是一个POST请求,而不是终端中的PUT请求。