Angularjs:通过服务发布数据到rails服务器
问题描述:
我想从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
- 我怎样才能解决这个问题呢?我怎样才能发送参数到rails服务器?
-
我想发送
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之前再次。哪里有问题?
答
看起来您正在成功提出请求,最后一行表示发出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
的问题不是与轨所以这是一个开始 - Rails的期望,你会调用'删除/ API /记录/:id'但你正在看起来像这样的请求'DELETE/api/record' – Ahmed 2014-08-30 15:33:06
我编辑了我的答案,修复了AngularJS代码。让我知道这是否有效。 – Ahmed 2014-08-30 15:39:23
你可能想要更新上面的代码,以便我可以看到有什么问题。这只是不发送身份证。 – Ahmed 2014-08-30 16:40:46