Ruby on rails Rails:通过Ajax传递参数

Ruby on rails Rails:通过Ajax传递参数,ruby-on-rails,ajax,json,params,Ruby On Rails,Ajax,Json,Params,我需要通过javascript将参数传递回服务器。目前,我将它们传递到javascript中,如下所示: sendParams("<%= params[:q].to_json %>"); 在我的控制器中,我尝试像使用任何其他参数一样使用它们: MyModel.where(params[:q]) 但是参数返回为空,即使firebug在POST选项卡中显示: q=%7B%26quot%3Bc%26quot%3B%3A%7B%26quot%3B0%26quot%3B%3A%7B%26q

我需要通过javascript将参数传递回服务器。目前,我将它们传递到javascript中,如下所示:

sendParams("<%= params[:q].to_json %>");
在我的控制器中,我尝试像使用任何其他参数一样使用它们:

MyModel.where(params[:q])
但是参数返回为空,即使firebug在POST选项卡中显示:

q=%7B%26quot%3Bc%26quot%3B%3A%7B%26quot%3B0%26quot%3B%3A%7B%26quot%3Ba%26quot%3B%3A%7B%26quot%3B0%26quot%3B%3A%7B%26quot%3Bname%26quot%3B%3A%26quot%3Btitle%26quot%3B%7D%7D%2C%26quot%3Bp%26quot%3B%3A%26quot%3Bcont%26quot%3B%2C%26quot%3Bv%26quot%3B%3A%7B%26quot%3B0%26quot%3B%3A%7B%26quot%3Bvalue%26quot%3B%3A%26quot%3B2%26quot%3B%7D%7D%7D%7D%2C%26quot%3Bs%26quot%3B%3A%7B%26quot%3B0%26quot%3B%3A%7B%26quot%3Bname%26quot%3B%3A%26quot%3Bvotes_popularity%26quot%3B%2C%26quot%3Bdir%26quot%3B%3A%26quot%3Bdesc%26quot%3B%7D%7D%7D
知道为什么where子句不能处理这些信息吗?如何使params Rails再次可读

更新:

Started POST "/publications/search?scroll=active&page=6" for 127.0.0.1 at 2013-0
2-12 22:55:24 -0600
Processing by PublicationsController#index as */*
Parameters: {"scroll"=>"active", "page"=>"6"}
更新2:

问题显然源于
contentType
。当我删除它时,
q
作为Rails参数发送。不幸的是,
q
仍然是JSON格式,导致错误:

undefined method `with_indifferent_access' for #<String:0x686d0a8>
未定义的方法“具有不同的访问权限”#

如何将JSON转换为参数散列?

您的数据参数错误

你有

data: {'q':q},
应该是

data: {q: 'q'},

有几个问题需要解决,才能使这项工作发挥作用。首先,
q
没有作为参数发送到Rails,即使它正在发布。原因是它被视为JSON数据而不是参数。我通过删除该行修复了此问题:

contentType: 'json'
之后,AJAX正确地发送了“q”,但Rails在使用它时遇到了麻烦,因为它是JSON格式的。我不得不用
ActiveSupport::JSON.decode
解析它,但这抛出了一个
737:unexpected token
错误。我通过(JSONlint)运行了代码[http://jsonlint.com/],结果所有的引号都被转义了

从那里,有两种解决方案。最明显的是使用
.html\u safe
如下:

sendParams("<%= params[:q].to_json.html_safe %>");

这就成功了。

您能显示development.log中记录的请求和参数吗。我想这是一个开发环境。很好的捕获。参数中根本没有出现“q”。我想应该是的,即使它在post数据中?很好。我不应该把第一个“q”加引号,尽管在我的情况下,我认为我应该把第二个q不加引号。(这是我传递给函数的一个参数。)不幸的是,尝试带引号和不带引号的第二个q仍然不起作用。根据我的日志,由于某种原因,q参数没有通过。
sendParams("<%= params[:q].to_json.html_safe %>");
ActiveSupport::JSON.decode(CGI.unescapeHTML(params[:q]))