2014-08-30 131 views
1

我想从angularjs发送数据到rails服务器。为此,我使用了012j,POST,DELETE,UPDATE方法的angularjs服务。我可以使用GET方法,但对于其他方法我无法使用,因为我必须将参数发送到服务器,但我无法执行此操作。Angularjs:通过服务发布数据到rails服务器

record.js

var app = angular.module('app'); 
app.controller('RecordCtrl',['$scope','Session','Records', function($scope, Session, Records){ 
    $scope.records = Records.index(); 
}]); 

recordService.js

'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' } 
     }); 
    }); 

,我通过下面的代码获得轨服务器数据:

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 

我不知道我怎么能发送方法从angularjs控制器到rails服务器。我尝试下面的代码,但我没有成功:

Records.create(function() { 
     //"name" is the name of record column. 
     return {name: test3}; 
    }); 

但我得到以下错误在轨服务器:

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 
  1. 我怎样才能解决这个问题呢?我怎样才能发送参数到rails服务器?
  2. 我想发送delete方法到rails服务器。我知道我要送record.id到服务器,我用以下类型:

    //type 1 
    var maskhare = { record_id: 4}; 
    Secure.destroy(function(){ 
        return maskhare.json; 
    }); 
    //type 2 
    Secure.destroy(4); 
    

    但我得到以下错误在服务器:

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

回答

1

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

问题是参数很强。您需要将name添加到已过滤的参数列表。

private 
def record_params 
    params.require(:record).permit(:secure, :name) 
end 

而且轨道预计在以下格式的参数:{ record: {name: 'something"} }

要解决你的第二个问题

我会尝试按照this recipe

这种替换代码:

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_to :json则可以省略在URL中.json。像这样:

class Api::V1::RecordController < Api::V1::BaseController 
    respond_to :json 
    ... 
end 
+0

的问题不是与轨所以这是一个开始 - Rails的期望,你会调用'删除/ API /记录/:id'但你正在看起来像这样的请求'DELETE/api/record' – Ahmed 2014-08-30 15:33:06

+0

我编辑了我的答案,修复了AngularJS代码。让我知道这是否有效。 – Ahmed 2014-08-30 15:39:23

+0

你可能想要更新上面的代码,以便我可以看到有什么问题。这只是不发送身份证。 – Ahmed 2014-08-30 16:40:46

相关问题