Разрывы строк в JSON-строке теряются контроллером Rails - PullRequest
8 голосов
/ 19 мая 2011

Ударить немного о кирпичную стену здесь. Я пытаюсь отправить строку, содержащую разрывы строк (\ n, преобразованный в \ u000a с помощью JSON.stringify) как часть объекта JSON, в приложение Rails:

{"bob":{"id":46,"notes":"foo\u000abar\u000abaz"}}

Это происходит по проводам, и \ 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=

Но как только запрос попадает в 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}

И это не просто какой-то артефакт регистрации, но они также попадают в базу данных:

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

Если я отправлю, например. "\\ 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}

Что происходит и почему?

Обновление: коллега смутно вспоминает, что слышал, что Пассажир подозревался в отбрасывании некоторых специальных символов, но он не может найти ссылку, подтверждающую это, и я тоже не могу ...?

1 Ответ

5 голосов
/ 19 мая 2011

Это может быть ничто, но разве PUT методы не предназначены для POST 'редактирования в RESTful Rails?GET - любой URL должен повторяться без каких-либо изменений в базе данных.

Если вы изменили свой вызов AJAX на post, вы также можете указать правильный тип контента application/json, чтобы Rails зналкак с этим справиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...