2014-01-06 43 views
1

現在,我可以創建對象並通過json api將它們保存到rails數據庫。這是一個簡單的待辦事項列表應用程序,當我添加一個對象時,它會進入輸入字段上方的待辦事項列表。我也能夠查詢索引視圖上的所有對象,並列出我所有的待辦事項對象。無法更新角度對象

當我點擊每個todo項目旁邊的複選框時,它應該將其:done屬性更改爲true,以便在單擊「清除」按鈕(這是clearCompleted函數)後我不再顯示它。

這裏是我的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 = ''; 
    }; 

} 

正在發生的事情是,而不是更新該對象在數據庫中,它正在創造一個全新的待辦事項,只是給它的:done => true屬性。這很有意義,因爲在clearCompleted函數中,它看起來像我們正在創建一個不更新現有對象的對象。

如何更新數據庫中的記錄呢?

+0

你在哪裏把ID在參數? – apneadiving

+0

你指的是資源方法嗎?有它,因爲我正在跟蹤一個railscast。 – user2184718

回答

0

您不應該使用Todo.save({})來更新待辦事項。正如你所說,它創建一個新的對象。

編寫代碼如下。

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(); 

Mabe你需要一個todo key參數在你的保存url中。

using $resource

+0

我們是否真的獲得了第一個待辦事項,或者我們是否應該獲得更新的待辦事項?當我們點擊複選框時,我們正在嘗試更改屬性。 – user2184718

+0

很明顯,應該是應該更新的待辦事項。 – Alborz

+0

它看起來像保存創建另一個對象。我將如何改變這個來更新屬性。 – user2184718