2014-09-02 65 views
0

我正在将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

的问题是,'Skillzer.query()'从数据库中获取的对象(如哈希),但它期望的阵列。检查你的json响应 – apneadiving 2014-09-02 06:52:29

回答

0

您的出厂配置为单条记录。这就是你得到这个错误的原因。在工厂下面进行索引操作。

factories.js

var app = angular.module('sideSkillz'); 

app.factory('Skillzer', function ($resource) { 
    return $resource('/skillzers', 
    { }, // Query parameters 
    { 'query': { method: 'GET' } } 
); 
}); 
+0

如果是这样的话,那么在线的很多例子,例如https://github.com/railscasts/405-angularjs,是不是这样做?实际上,$ resource似乎与应该映射到相应控制器的索引方法的查询方法一起提供。 – 2014-09-02 14:31:04