2013-03-12 23 views
1

我剛剛開始學習Angular,並觀看了Ryan Bates的'Railscast,以及閱讀BerylliumWork的tutorial,但我仍在努力弄清楚如何從Rails服務器訪問數據。在Angular和Rails中訪問數據對象

我在這裏有一個非常簡單的用例。我想在視圖中訪問用戶的first_name。

這裏是視圖代碼:

<div ng-controller="UserCtrl"> 
    {{user.first_name}} 
</div> 

這裏是CoffeeScript的文件:

app = angular.module("app", ["ngResource"]) 
app.factory "User", ["$resource", ($resource) -> 
    $resource("https://stackoverflow.com/users/:id", {id: "@id"}, { 
    show: {method: "GET"} 
    }) 
] 

@UserCtrl = ["$scope", "User", ($scope, User) -> 
    $scope.users = User.query() 
    $scope.user = User.show(id: **1**) 
] 

這裏是我的控制器:

def show 
    respond_with User.find(params[:id]) 
end 

正如你所看到的,我有一個$ scope.user中的硬編碼id,它顯示在頁面上。同樣,如果我使用ng-app =「user in user」... {user.first_name}之類的東西,我會得到完整的用戶列表。

我該如何獲得一個用戶實例?使用實例變量,而不是我的硬編碼「1」?

回答

1

默認:

  • $ resource.query()是獲取對象的列表。
  • $ resource.get({PARAMS})可以得到一個單一的對象

在你的情況,你需要$scope.user = User.get({id: 1})

+0

儘管如何讓「1」變量?上面的代碼已經拉用戶1。但是如果我想要用戶n呢? – jflores 2013-03-12 16:09:10

+0

'User.query()'獲取所有用戶的列表(假設你沒有提供任何過濾器,例如'User.query({active:true})'')。該列表是一個對象數組。每個對象都是一個特定的對象,由服務器的響應如何定義。這要取決於您決定如何瀏覽此列表以便獲取(並可能編輯)每個用戶。您也可以使用單獨的路徑來獲取/顯示/編輯單個用戶。您可以通過在$ routeProvider中定義的自定義路由(例如'when('/ users /:id',{controller:'UserCtrl',templateUrl:'path_to_tpl'})')來完成此操作。 – Stewie 2013-03-12 17:06:56

+0

這就是我需要做的 - 設置$ routeProvider。非常感謝@Stewie!確實,勝利是你的。 – jflores 2013-03-12 23:19:02