JSON от Rails до Angularjs

0

Я пытаюсь использовать Angularjs для получения JSON из тестового приложения Rails, которое я положил на Heroku. Ниже вы найдете мой код Angular and 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;        
        });
});

Код Rails

  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
  • 0
    Есть ли у вас маршруты, определенные следующим образом: resources :declarations ?
  • 0
    да, опубликуйте свой код route.rb
Показать ещё 3 комментария

1 ответ

4

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

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, каковы зависимости, чтобы, если имена меняются (во время минимизации), это не имеет значения. Вы должны сделать это для каждой функции, которая принимает услуги, например, тот, который у вас есть для создания контроллера приложения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню