Ruby on rails 如何在rails控制器中响应AJAX POST请求
我正试图让我的google chrome扩展使用Ajax将数据发送到我的ruby on rails站点,但很难弄清楚这里发生了什么: 我看到我的rails服务器已经收到了我正在发送的两个阵列的数据,但是有一个404?然后我有一个关于用户id的错误Ruby on rails 如何在rails控制器中响应AJAX POST请求,ruby-on-rails,ajax,google-chrome-extension,Ruby On Rails,Ajax,Google Chrome Extension,我正试图让我的google chrome扩展使用Ajax将数据发送到我的ruby on rails站点,但很难弄清楚这里发生了什么: 我看到我的rails服务器已经收到了我正在发送的两个阵列的数据,但是有一个404?然后我有一个关于用户id的错误 Started POST "/add_service" for 127.0.0.1 at 2014-01-24 00:34:37 +0800 Processing by UsersController#add_service as HTML Par
Started POST "/add_service" for 127.0.0.1 at 2014-01-24 00:34:37 +0800
Processing by UsersController#add_service as HTML
Parameters: {"urlArray2"=>["0.0.0.0", "item.jd.com", "stackoverflow.com", "www.google.com.hk"], "countArray2"=>["3670", "20", "2", "2"]}
User Load (11.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 1]]
Completed 404 Not Found in 13ms
ActiveRecord::RecordNotFound - Couldn't find User without an ID:
...
...
这是我的Chrome扩展中的Ajax:
jQuery.ajax({
type: "POST",
dataType: "JSON",
url: "http://0.0.0.0:3000/add_service",
data: ({'urlArray2':urlArray2,'countArray2':countArray2}),
success: function(){
//alert("Web services loaded into ConsultFred.");
}
});
这是我的用户控制器:
skip_before_filter :verify_authenticity_token, :only => [:add_service]
...
...
def add_service
logger.debug "This is working..."
#@user = current_user
#@user.sitearray = params[:urlArray2]
repsond_to do |format|
format.html { redirect_to root_url }
format.json { redirect_to root_url }
end
end
My routes.rb编辑:添加更多信息:
resources :users, :only => [:index, :show, :edit, :update ] do
post :share_to_linkedin, on: :member
end
post 'add_service', to: 'users#add_service'
[1月24日编辑]
现在来看AJAX响应,实际上是参数问题,没有提供user.id号:
ActiveRecord::RecordNotFound at /add_service
============================================
> Couldn't find User without an ID
我怎么可能把它寄出去呢?ajax请求是来自chrome扩展的外部请求?我认为以下几行代码为您提供了关键:
User Load (11.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 1]]
Completed 404 Not Found in 13ms
ActiveRecord::RecordNotFound - Couldn't find User without an ID
看起来您没有正确地将参数传递给查询。该$1应作为实际值传递给SQL语句。在哪里设置当前用户变量?因为如果您试图从外部访问,则可能无法设置current_user变量。current_user是ApplicationController中的帮助器方法。我想我现在的问题是logger.debug方法的第一行正在运行。。。甚至没有被处决吗?@MarkoJurinčič你说得对!我该如何解决这个问题呢?外部的chrome扩展不太清楚…您可以在post参数中添加一个额外的参数user\u id,然后只添加user=user.findparams[:user\u id]…此外,我正在使用AdvanceREST客户端测试Rest通信发布parameters@MarkoJurinčič问题是ajax post请求来自chrome扩展,它不知道用户id。也许我的chrome扩展需要登录到我的rails站点才能获得用户id?如果是这样的话,有什么好办法呢?你说得对。但是,AJAX是从chrome扩展发送的,因此我没有任何其他参数要发送…这是UserController工作时的一个示例,没有区别->由UsersControllerindex处理,因为HTML用户加载51.3ms选择用户。*来自users.id=$1 LIMIT 1[[id,1]]的用户,在这种情况下,与语法问题不同的是,您的示例中$1的内容必须为空。无论如何,rails没有被赋予一个ID来查找用户。