我在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
我该怎么做?
答案 0 :(得分:0)
编辑:
当您呼叫getprofile()
功能时,您已经通过了d.name
,您应该将其更改为:getprofile(d)
您正在调用params[:name]
的控制器,因此在ajax中您必须更改data: { name: JSON.stringify(d.name) }