我正在努力将AngularJS与Rails集成,并且我得到了一些让我疯狂的错误。我有一个AngularJS工厂和一个控制器,它调用Rails控制器的索引方法,但是,我在JavaScript控制台中收到了这个错误。
Error: [$resource:badcfg] Error in resource configuration. Expected response to contain an array but got an object
http://errors.angularjs.org/1.2.22/$resource/badcfg?p0=array&p1=object
at http://localhost:3000/assets/angular.js?body=1:79:12
at $http.then.value.$resolved (http://localhost:3000/assets/angular-resource.js?body=1:541:23)
at wrappedCallback (http://localhost:3000/assets/angular.js?body=1:11547:81)
at wrappedCallback (http://localhost:3000/assets/angular.js?body=1:11547:81)
at http://localhost:3000/assets/angular.js?body=1:11633:26
at Scope.$eval (http://localhost:3000/assets/angular.js?body=1:12659:28)
at Scope.$digest (http://localhost:3000/assets/angular.js?body=1:12471:31)
at Scope.$apply (http://localhost:3000/assets/angular.js?body=1:12763:24)
at done (http://localhost:3000/assets/angular.js?body=1:8358:45)
at completeRequest (http://localhost:3000/assets/angular.js?body=1:8572:7)
我的代码是这样的:
的application.js
//= require jquery
//= require jquery_ujs
//= require angular
//= require angular-resource
//= require bootstrap
//= require jquery.raty
//= require welcome
//= require users
//= require angular/config
//= require angular/factories
//= require_tree ./angular/controllers
config.js
var app = angular.module('sideSkillz', ['ngResource'])
factories.js
var app = window.app;
app.factory('Skillzer', function ($resource) {
return $resource('/skillzers/:id',
{ id: "@id" },
{ update: { method: 'PUT' } }
);
});
skillzersCtrl.js
function skillzersCtrl ($scope, Skillzer) {
$scope.skillzers = Skillzer.query();
}
skillzers_controller.rb
class SkillzersController < ApplicationController
respond_to :html, :json
before_action :find_skillzer, only: :show
def index
@skillzers = Skillzer.all
respond_with @skillzers
end
def show
respond_with @skillzer
end
private
def find_skillzer
@skillzer = Skillzer.find(params[:id])
end
end
skillzers / index.html.haml
.container{ ng: { controller: 'skillzersCtrl' } }
%p{ ng: { repeat: 'skillzer in skillzers' } }
{{skillzer[0].first_name}}
这篇文章已经很长时间了所有代码,但这让我现在感到疯狂。另外,我知道它不是最有效的代码,因为它加载了html,而angularjs需要进行另一个api调用,但我真的将它用作angularjs的学习练习。任何人都可以查明我做错了什么吗?这些示例看起来非常类似于许多示例应用程序(尤其是Railscasts AngularJS),但它不起作用!
谢谢!
答案 0 :(得分:0)
您的工厂配置单个记录。这就是你得到这个错误的原因。在工厂下面进行索引操作。
factories.js
var app = angular.module('sideSkillz');
app.factory('Skillzer', function ($resource) {
return $resource('/skillzers',
{ }, // Query parameters
{ 'query': { method: 'GET' } }
);
});