JSON из Rails в Angularjs

Я пытаюсь использовать Angularjs для получения JSON из тестового приложения Rails, которое я установил на Heroku. Ниже вы найдете мой код для Angular и Rails.

Это ошибка, которую я получаю в своей консоли Firebug. «NetworkError: 404 Not Found — http://desolate-earth-2852.herokuapp.com/declarations.json"

Есть ли причина, по которой это не работает?

Код Angularjs

var App = angular.module('App', []);

App.controller('TodoCtrl', function($scope, $http) {
  $http.get('http://desolate-earth-2852.herokuapp.com/declarations.json')
       .then(function(res){
          $scope.todos = res.data;        
        });
});

Код рельсов

  def index
    @declarations = Declaration.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @declarations }
    end
  end

Вот маршруты

Test::Application.routes.draw do
  root :to => 'welcome#index'
  get "welcome/index"
  resources :declarations
end

person Jonathan    schedule 16.10.2013    source источник
comment
У вас есть маршруты, определенные следующим образом: resources :declarations ?   -  person Edgars Jekabsons    schedule 17.10.2013
comment
да, опубликуйте свой код route.rb   -  person n_i_c_k    schedule 17.10.2013
comment
Я добавил маршруты. У меня уже были ресурсы :declarations.   -  person Jonathan    schedule 17.10.2013
comment
странно, что вы получаете 404. Вы используете угловой код из того же приложения herokuapp? Не могли бы вы указать URL-адрес, по которому работает угловой код?   -  person Manuel van Rijn    schedule 17.10.2013
comment
@ Мануэль ван Рейн. Я запускаю код Angular локально на своем рабочем столе.   -  person Jonathan    schedule 17.10.2013


Ответы (1)


Это может быть из-за минимизации Rails JS. Райан Бейтс рассказывает об этом в своем Railscast об интеграции AngularJS. Я заметил, что у вас ничего не упоминается о том, что вы учитывали минимизацию в своих файлах конфигурации, и если вы этого не делаете, это означает, что все ваши внедрения зависимостей в вашем коде Angular должны быть помещены в и массив, например:

App.controller('TodoCtrl', ['$scope', '$http', function($scope, $http) {
  $http.get('http://desolate-earth-2852.herokuapp.com/declarations.json')
    .then(function(res){
       $scope.todos = res.data;        
    });
}]);

Вместо этого:

App.controller('TodoCtrl', function($scope, $http) {
  $http.get('http://desolate-earth-2852.herokuapp.com/declarations.json')
   .then(function(res){
      $scope.todos = res.data;        
   });
});

Это сообщает AngularJS, каковы зависимости, поэтому, если имена изменятся (во время минификации), это не будет иметь значения. Вы должны сделать это для каждой функции, которая принимает службы, например, для той, что у вас есть здесь для создания контроллера приложения.

person jjl2    schedule 29.10.2013