如何从ajax调用控制器

时间:2015-06-13 18:56:10

标签: ruby-on-rails ajax

我在rails应用程序中有一个图表(基于d3)。用户点击图表,然后我希望点击将导致我的rails应用程序中显示一个页面,该页面基于传递给show动作或用户控制器的名称。问题是我继续得到答复:

ActiveRecord::RecordNotFound in UsersController#show

这是因为我无意中传递了参数

{"id"=>"show"}

我不知道如何纠正。

ajax调用(来自d3.js的一些javascript,这是我从中得到的名字)是:

    var node = svg.selectAll(".node")
      .data(graph.nodes)
      .enter().append("circle")
      .attr("class", "node")
      .attr("r", function(d) { return d.group * 3; })
      .style("fill", function(d) { return color(d.group); })
      .call(force.drag)
    //   .on('click', connectedNodes)
      .on("click",  function(d) { getprofile(d.name); });

//       function getprofile(name){
//     console.log(name);
// };



      function getprofile(d){
      $.ajax({
        url: "/users/show" ,
        type: "GET",
        dataType: 'json',
        data: { name: JSON.stringify(d.name) }
    })};

,控制器是

 class UsersController < ApplicationController

...
def show
    @user = User.find(params[:name])
end
end

我想我希望参数

{"name" => "the_name_of_the_d.name_I_have_passed}

我的路线如下

Prefix Verb   URI Pattern               Controller#Action
graph_index GET    /graph/index(.:format)    graph#index
 graph_data GET    /graph/data(.:format)     graph#data
            GET    /graph/index(.:format)    graph#index
      users GET    /users(.:format)          users#index
            POST   /users(.:format)          users#create
   new_user GET    /users/new(.:format)      users#new
  edit_user GET    /users/:id/edit(.:format) users#edit
       user GET    /users/:id(.:format)      users#show
            PATCH  /users/:id(.:format)      users#update
            PUT    /users/:id(.:format)      users#update
            DELETE /users/:id(.:format)      users#destroy

我该怎么做?

1 个答案:

答案 0 :(得分:0)

编辑:

当您呼叫getprofile()功能时,您已经通过了d.name,您应该将其更改为:getprofile(d)

您正在调用params[:name]的控制器,因此在ajax中您必须更改data: { name: JSON.stringify(d.name) }