Получение записей Rails с помощью Angular $resource

Я пытаюсь получить коллекцию записей rails, используя ресурс $ angular, однако, когда я пытаюсь отобразить эти записи в представлении, я продолжаю получать пустой массив.

posts_controller.rb

def index
  @posts = current_user.author.posts.limit(25)
end

app.js.coffee

app = angular.module('app', ['ngResource'])

app.factory 'Posts', ($resource) ->
  $resource '/posts/:id', {}, query:
    method: 'GET'
    isArray: true
    responseType: 'json'

app.controller 'PostsCtrl', ($scope, Posts) ->
  $scope.posts = Posts.query()

В консоли я вижу, что $resolved является ложным, поэтому я не уверен, связана ли проблема с доступом к самим данным json или с $promise


person Reuben    schedule 02.04.2015    source источник


Ответы (1)


Требуется некоторое время, чтобы разобраться с асинхронным программированием, исходящим из такого языка, как Ruby, в котором отсутствует асинхронность.

Вам нужно передать обратный вызов методу query(). Итак, ваш пример должен выглядеть (в JS):

Posts.query(function(posts) {
    $scope.posts = posts;
})

Примечание: рекомендуется публиковать пример кода Angular на JavaScript, если только вопрос не касается CoffeeScript.

person Martin    schedule 02.04.2015
comment
Понятно. $resolved теперь имеет значение true, но по-прежнему возвращает пустой массив. Таким образом, кажется, что основная проблема заключается в том, что $resource неправильно обращается к моим записям rails. Каков наилучший подход к устранению этой неполадки? - person Reuben; 02.04.2015
comment
Используйте инструменты разработчика в браузере, чтобы подтвердить свою гипотезу. Вы должны увидеть запрос и ответ. В инструментах разработчика Chrome перейдите в «Сеть», выберите фильтр и выберите «Ajax». - person Martin; 02.04.2015
comment
Да, это заработало, пришлось изменить способ получения записей в контроллере (rails) - person Reuben; 06.04.2015