Я пытаюсь использовать Angularjs для получения JSON из тестового приложения Rails, которое я положил на Heroku. Ниже вы найдете мой код Angular and Rails.
Это ошибка, которую я получаю в своей консоли Firebug. "NetworkError: 404 Not Found - http://desolate-earth-2852.herokuapp.com/declarations.json "
Есть ли причина, по которой это не работает?
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
Возможно, это связано с минимизацией 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, каковы зависимости, чтобы, если имена меняются (во время минимизации), это не имеет значения. Вы должны сделать это для каждой функции, которая принимает услуги, например, тот, который у вас есть для создания контроллера приложения.
resources :declarations
?