Ruby on rails 如何在rails控制器中响应AJAX POST请求

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

我正试图让我的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
  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来查找用户。