Ruby on rails Angularjs:通过服务将数据发布到rails服务器

Ruby on rails Angularjs:通过服务将数据发布到rails服务器,ruby-on-rails,angularjs,Ruby On Rails,Angularjs,我想将数据从angularjs发送到rails服务器。为此,我有一个angularjs服务,我使用GET,POST,DELETE,UPDATE方法。我可以使用GET方法,但对于其他方法我不能使用,因为我必须向服务器发送参数,但我不能这样做 record.js: var app = angular.module('app'); app.controller('RecordCtrl',['$scope','Session','Records', function($scope, Session, R

我想将数据从angularjs发送到rails服务器。为此,我有一个angularjs服务,我使用
GET
POST
DELETE
UPDATE
方法。我可以使用
GET
方法,但对于其他方法我不能使用,因为我必须向服务器发送参数,但我不能这样做

record.js

var app = angular.module('app');
app.controller('RecordCtrl',['$scope','Session','Records', function($scope, Session, Records){
    $scope.records = Records.index();
}]);
'use strict';
var app = angular.module('recordService', ['ngResource']);
//angular.module('recordService', ['ngResource'])
app.factory('Records', function($resource) {
    return $resource('/api/record.json', {}, {
        index: { method: 'GET', isArray: true},
        create: { method: 'POST' }
    });
})
    .factory('Secure', function($resource){
        return $resource('/api/record/:record_id.json', {}, {
            show: { method: 'GET' },
            update: { method: 'PUT' },
            destroy: { method: 'DELETE' }
        });
    });
recordService.js

var app = angular.module('app');
app.controller('RecordCtrl',['$scope','Session','Records', function($scope, Session, Records){
    $scope.records = Records.index();
}]);
'use strict';
var app = angular.module('recordService', ['ngResource']);
//angular.module('recordService', ['ngResource'])
app.factory('Records', function($resource) {
    return $resource('/api/record.json', {}, {
        index: { method: 'GET', isArray: true},
        create: { method: 'POST' }
    });
})
    .factory('Secure', function($resource){
        return $resource('/api/record/:record_id.json', {}, {
            show: { method: 'GET' },
            update: { method: 'PUT' },
            destroy: { method: 'DELETE' }
        });
    });
我通过以下代码在rails服务器中获取数据:

class Api::V1::RecordController < Api::V1::BaseController
  def index 
    respond_with(Record.all)
  end

  def show
    @data = Record.find(params[:id]).to_json()
    respond_with(@data)
  end

  def update 
    @data = Record.find(params[:id])
    respond_to do |format|
      if @data.update_attributes(record_params)
        format.json { head :no_content }
      else
        format.json { render json: @data.errors, status: :unprocessable_entity }
      end
    end
  end

  def create
    @data = Record.create(record_params)
    @data.save
    respond_with(@data)
  end

  def destroy
    @data = Record.find(params[:id])
    @data.destroy
    respond_to do |format|
      format.json  { head :ok }
    end
  end

  private
  def record_params
    params.require(:record).permit(:name)
  end
end
但我在rails服务器中发现以下错误:

Started POST "/api/record.json" for 127.0.0.1 at 2014-08-30 17:55:27 +0430
Processing by Api::V1::RecordController#create as JSON
  • 我如何解决这个问题?如何将参数发送到rails服务器
  • 我想将
    delete
    方法发送到rails服务器。我知道我必须向服务器发送
    record.id
    ,我使用以下类型:

    //type 1
    var maskhare = { record_id: 4};
    Secure.destroy(function(){
        return maskhare.json;
    });
    //type 2
    Secure.destroy(4);
    
    但我在服务器中发现以下错误:

    2014-08-30 19:01:21+0430开始删除127.0.0.1的“/api/记录” ActionController::RoutingError(没有与[DELETE]“/api/record”匹配的路由): 我在
    recordService.js
    中修复了正确的url,但我不知道为什么再次在url之前发送请求。问题在哪里


  • 看起来您正在成功地发出请求,最后一行表示发出了POST请求,并转到了正确的控制器和操作

    问题在于强参数。您需要将
    name
    添加到筛选参数列表中

    private
    def record_params
      params.require(:record).permit(:secure, :name)
    end
    
    rails还需要以下格式的参数:
    {record:{name:'something'}}

    解决第二个问题

    我会试着跟随

    将代码替换为以下内容:

    app.factory("Secure", function($resource) {
      return $resource("/api/record/:id", { id: "@id" },
        {
          'show':    { method: 'GET', isArray: false },
          'update':  { method: 'PUT' },
          'destroy': { method: 'DELETE' }
        }
      );
    });
    
    然后

    Secure.destroy({id: 4});
    
    请记住,如果在控制器中添加
    respond\u to:json
    ,则可以忽略URL中的
    .json
    。如下所示:

    class Api::V1::RecordController < Api::V1::BaseController
      respond_to :json
      ...
    end
    
    class Api::V1::RecordController
    问题不在rails上,所以这是一个开始——rails希望您调用
    DELETE/api/record/:id
    ,但您发出的请求看起来是这样的
    DELETE/api/record
    我用AngularJS代码的修复程序编辑了我的答案。让我知道这是否有效。您可能需要更新上面的代码,以便我可以看到什么错了,只是没有把身份证寄过来。