Rails控制器丢失JSON字符串中的换行符

jpa*_*kal 8 ruby json ruby-on-rails passenger line-breaks

在这里打了一堵砖墙.我正在尝试将包含换行符的字符串(\n,由JSON.stringify转换为\ u000a)作为JSON对象的一部分发送到Rails应用程序:

{"bob":{"id":46,"notes":"foo\u000abar\u000abaz"}}
Run Code Online (Sandbox Code Playgroud)

这样就越过电线,\ u000a转义为%5Cu000a:

http://localhost/bobs/46?draft=true&%7B%22bob%22%3A%7B%22id%22%3A46%2C%22notes%22%3A%22foo%5Cu000abar%5Cu000abaz%22%7D%7D=
Run Code Online (Sandbox Code Playgroud)

但是第二个请求击中了Rubyland,新行消失在一个以太的空间中,变成了空格:

Processing Api::BobsController#update (for 127.0.0.1 at 2011-05-19 11:01:43) [PUT]
  Parameters: {"draft"=>"true", "action"=>"update", "id"=>"46", "controller"=>"api/bobs", "bob"=>{"notes"=>"foo bar baz", "id"=>46}
Run Code Online (Sandbox Code Playgroud)

而且它不仅仅是一些日志工件,而且它们也会以这种方式进入数据库:

ree-1.8.7-2010.02 > Bob.find_by_id(46)
 => #<Bob id: 46, notes: "foo bar baz"...>
Run Code Online (Sandbox Code Playgroud)

如果我发送例如."\\n"而不是"\n",它们通过罚款:

Processing Api::BobsController#update (for 127.0.0.1 at 2011-05-19 11:01:43) [PUT]
  Parameters: {"draft"=>"true", "action"=>"update", "id"=>"46", "controller"=>"api/bobs", "bob"=>{"notes"=>"foo\\nbar\\nbaz", "id"=>46}
Run Code Online (Sandbox Code Playgroud)

发生了什么事,为什么?

更新:一位同事模糊地回忆起听说Passenger被怀疑放弃了一些特殊的字符,但他找不到提及这一点,我也不能......?

Laa*_*aas 5

这可能不算什么,但是不是那些PUT想要POST在RESTful Rails中使用的方法吗?GET - 任何URL都应该是可重复的,无需对数据库进行任何更改.

如果你改变了你的AJAX调用,post你也可以指出正确的内容类型,application/json以便Rails知道如何处理它.