Rails + AngularJS在$ resource调用时返回奇怪的错误

时间:2014-09-02 02:54:20

标签: ruby-on-rails angularjs

我正在努力将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),但它不起作用!

谢谢!

1 个答案:

答案 0 :(得分:0)

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

factories.js

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

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