Ruby on rails Angularjs:通过服务将数据发布到rails服务器
我想将数据从angularjs发送到rails服务器。为此,我有一个angularjs服务,我使用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
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
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代码的修复程序编辑了我的答案。让我知道这是否有效。您可能需要更新上面的代码,以便我可以看到什么错了,只是没有把身份证寄过来。