JSON Ошибка синтаксического анализатора 783: неожиданный токен для параметров с "" - PullRequest
3 голосов
/ 04 мая 2020

Я редактирую ресурс - @article - и всякий раз, когда я отправляю его, я получаю следующую ошибку:

JSON::ParserError in ArticlesController#update
783: unexpected token at '#<ImageUploader::UploadedFile:0x00007fb154adb508>'

Он выделил эту строку:

  if @article.update(article_params)

Что обычный шаблон Rails в моем Article#Update действии:

  def update
    respond_to do |format|
      if @article.update(article_params)
        format.html { redirect_to @article, notice: 'Article was successfully updated.' }
        format.json { render :show, status: :ok, location: @article }
      else
        format.html { render :edit }
        format.json { render json: @article.errors, status: :unprocessable_entity }
      end
    end
  end

Вот полный вывод из журналов сервера (включая параметры):

Started PATCH "/articles/welcome-to-ftja" for ::1 at 2020-05-04 02:11:43 -0500
Processing by ArticlesController#update as HTML
  Parameters: {"authenticity_token"=>"0pO56DaVEiWLX3iE3HNHRKsAPOK2z4RmUaH3jal5rOZjk7zYeoaSru9xOE9GYzLckTbnrVrz4ihXrc1hWcXzXA==", "article"=>{"title"=>"Welcome to FTJA!!", "featured"=>"true", "image"=>"#<ImageUploader::UploadedFile:0x00007fb154adb508>", "body"=>"<h1>Yet another great article.</h1><div>Test <strong>bold</strong> <em>italic</em> <del>strikethrough<br><br></del><figure data-trix-attachment=\"{&quot;content&quot;:&quot;<figure class=\\&quot;attachment attachment--preview attachment--jpg\\&quot;>\\n    <img src=\\&quot;http://localhost:3000/rails/active_storage/representations/eyJfcJ2YXJpYXRpb24ifX0=--5b3d481c22cafd1ff8db36c1b24e57d8788d2217/cowork-4.jpg\\&quot; />\\n\\n  <figcaption class=\\&quot;attachment__caption\\&quot;>\\n      Coworking.\\n  </figcaption>\\n</figure>\\n&quot;,&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;filename&quot;:&quot;cowork-4.jpg&quot;,&quot;filesize&quot;:82497,&quot;height&quot;:768,&quot;previewable&quot;:true,&quot;sgid&quot;:&quot;_ZXhwaXJlc19pbgY7AFRJIgxwdXJwb3NlBjsAVEkiD2F0dGFjaGFibGUGOwBUSSIPZXhwaXJlc19hdAY7AFQw--e56d2e422&quot;,&quot;url&quot;:&quot;http://localhost:3000/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBEUT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--6d89ec207ef10c8e48577a5e9a170a8d178a9338/cowork-4.jpg&quot;,&quot;width&quot;:752}\" data-trix-content-type=\"image/jpeg\" data-trix-attributes=\"{&quot;caption&quot;:&quot;Coworking.&quot;,&quot;presentation&quot;:&quot;gallery&quot;}\" class=\"attachment attachment--content attachment--jpg\"><figure class=\"attachment attachment--preview attachment--jpg\">\r\n    <img src=\"http://localhost:3000/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBEUT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--6d89ec207ef10c8e48577a5e9a170a8d178a9338/cowork-4.jpg\" width=\"752\" height=\"768\">\r\n\r\n  <figcaption class=\"attachment__caption\">\r\n      Coworking.\r\n  </figcaption>\r\n</figure>\r\n<figcaption class=\"attachment__caption attachment__caption--edited\">Coworking.</figcaption></figure><br><br><br><figure data-trix-attachment=\"{&quot;content&quot;:&quot;<figure class=\\&quot;attachment attachment--preview attachment--jpg\\&quot;>\\n    <img src=\\&quot;http://localhost:3000/rails/active_storage/representations/eyJfcmFpbHMiOnsibWVzc2F-5b3d481c22cafd1ff8db36c1b24e57d8788d2217/article-1.jpg\\&quot; />\\n\\n  <figcaption class=\\&quot;attachment__caption\\&quot;>\\n      Working, working, working.\\n  </figcaption>\\n</figure>\\n&quot;,&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;filename&quot;:&quot;article-1.jpg&quot;,&quot;filesize&quot;:83730,&quot;height&quot;:800,&quot;previewable&quot;:true,&quot;sgid&quot;:&quot;BAh7CEkiCGdpZAY6BkVU--d99eadb00dd5ae6bb4220f5781b2946c2171604f&quot;,&quot;url&quot;:&quot;http://localhost:3000/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBEZz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--5c31ee2db4a2660d4a674dfb54375fda30251d3d/article-1.jpg&quot;,&quot;width&quot;:1200}\" data-trix-content-type=\"image/jpeg\" data-trix-attributes=\"{&quot;caption&quot;:&quot;Working, working, working.&quot;,&quot;presentation&quot;:&quot;gallery&quot;}\" class=\"attachment attachment--content attachment--jpg\"><figure class=\"attachment attachment--preview attachment--jpg\">\r\n    <img src=\"http://localhost:3000/rails/active_storage/representations/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBEZz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9i6IkJBaDdCam9VY21WemFYcGxYM1J2WDJ4cGJXbDBXd2RwQWdBRWFRSUFBdz09IiwiZXhwIjpudWxsLCJwdXIiOiJ2YXJpYXRpb24ifX0=--5b3d481c22cafd1ff8db36c1b24e57d8788d2217/article-1.jpg\">\r\n\r\n  <figcaption class=\"attachment__caption\">\r\n      Working, working, working.\r\n  </figcaption>\r\n</figure>\r\n<figcaption class=\"attachment__caption attachment__caption--edited\">Working, working, working.</figcaption></figure><br><br><br></div>", "user_id"=>"1", "category_list"=>["", "Business", "Real Estate"]}, "commit"=>"Update Article", "id"=>"welcome-to-ftja"}
  Article Load (2.1ms)  SELECT "articles".* FROM "articles" WHERE "articles"."slug" = $1 LIMIT $2  [["slug", "welcome-to-ftja"], ["LIMIT", 1]]
  ↳ app/controllers/articles_controller.rb:73:in `set_article'
   (2.1ms)  BEGIN
  ↳ app/controllers/articles_controller.rb:50:in `block in update'
  ActionText::RichText Load (4.0ms)  SELECT "action_text_rich_texts".* FROM "action_text_rich_texts" WHERE "action_text_rich_texts"."record_id" = $1 AND "action_text_rich_texts"."record_type" = $2 AND "action_text_rich_texts"."name" = $3 LIMIT $4  [["record_id", 1], ["record_type", "Article"], ["name", "body"], ["LIMIT", 1]]
  ↳ app/controllers/articles_controller.rb:50:in `block in update'
   (1.3ms)  ROLLBACK
  ↳ app/controllers/articles_controller.rb:50:in `block in update'
Completed 500 Internal Server Error in 27ms (ActiveRecord: 9.4ms | Allocations: 5092)



JSON::ParserError (783: unexpected token at '#<ImageUploader::UploadedFile:0x00007fb154adb508>'):

app/controllers/articles_controller.rb:50:in `block in update'
app/controllers/articles_controller.rb:49:in `update'

Если вы заметили category_list в параметрах, я полагаю, что это может быть причиной:

"category_list"=>["", "Business", "Real Estate"]},

На основании некоторого поиска в Google, который я сделал, это может быть пустая строка "", которая выбрасывает JSON Анализ для всех oop.

Одно предложение, которое я нашел, состояло в том, чтобы изменить сериализатор Cook ie на :hybrid, вот так:

Rails.application.config.action_dispatch.cookies_serializer = :hybrid

Я попробовал это и перезагрузил сервер, и не повезло .

Что может быть причиной и как я могу это исправить?

Редактировать 1

В консоли на странице ошибок я попробовал также:

>> article_params[:category_list]
=> ["", "Business", "Real Estate"]
>> article_params[:category_list].to_json
=> "[\"\",\"Business\",\"Real Estate\"]"
>> @article.image
=> #<ImageUploader::UploadedFile storage=:store id="3b96dc3198098a9f57ff2b00a2cdb252.jpg" metadata={"filename"=>"article-3.jpg", "size"=>99083, "mime_type"=>"image/jpeg"}>

Редактировать 2

Я использую SimpleForm для обработки моих форм и усеченной версии th Конкретная форма выглядит следующим образом:

<%= simple_form_for article, html: {multipart: true} do |f| %>
   <%= f.input_field :title, placeholder: "Title", class: "form-control" %>
   <%= f.rich_text_area :body, class: 'form-control customized-min-height', placeholder: "Enter your article body here..." %>
   <%= f.input :user_id, as: :hidden, input_html: { value: current_user.id } %>

   <%= f.input_field :category_list, collection: ActsAsTaggableOn::Tag.all.pluck(:name), input_html: { value: article.category_list.join(","), class: "custom-control-input" }, as: :check_boxes %>

      <%= f.button :submit, class:"btn btn-primary" %>
<% end %>

Приведенная выше форма выдает "" только когда я go до Articles#Edit

Это мое Articles#Edit действие контроллера:

  # GET /articles/1/edit
  def edit
  end

Как мне это исправить?

Редактировать 3

Хорошо Я в итоге получил форму, чтобы не возвращать эту пустую строку, добавив include_blank: false и include_hidden: false примерно так:

<%= f.input_field :category_list, collection: ActsAsTaggableOn::Tag.all.pluck(:name), input_html: { value: article.category_list.join(","), class: "custom-control-input" }, as: :check_boxes, include_blank: false, include_hidden: false %>

, который генерирует параметры, которые выглядят так:

>> article_params
=> <ActionController::Parameters {"title"=>"Welcome!!", "body"=>"<h1>Yet another great article.</h1><div>Test <strong>bold</strong> <em>italic</em> <del>strikethrough<br><br></del><figure data-trix-attachment=\"{&quot;content&quot;:&quot;<figure class=\\&quot;attachment attachment--preview attachment--jpg\\&quot;>\\n    <img src=\\&quot;http://localhost:3000/rails/active_storage/representations/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBd2217/cowork-4.jpg\\&quot; />\\n\\n  <figcaption class=\\&quot;attachment__caption\\&quot;>\\n      Coworking.\\n  </figcaption>\\n</figure>\\n&quot;,&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;filename&quot;:&quot;cowork-4.jpg&quot;,&quot;filesize&quot;:82497,&quot;height&quot;:768,&quot;previewable&quot;:true,&quot;sgid&quot;:&quot;BAhaac&quot;,&quot;url&quot;:&quot;http://localhost:3000/rails/active_storage/blobs/eya9338/cowork-4.jpg&quot;,&quot;width&quot;:752}\" data-trix-content-type=\"image/jpeg\" data-trix-attributes=\"{&quot;caption&quot;:&quot;Coworking.&quot;,&quot;presentation&quot;:&quot;gallery&quot;}\" class=\"attachment attachment--content attachment--jpg\"><figure class=\"attachment attachment--preview attachment--jpg\">\r\n    <img src=\"http://localhost:3000/rails/active_storage/representations/e88d2217/cowork-4.jpg\">\r\n\r\n  <figcaption class=\"attachment__caption\">\r\n      Coworking.\r\n  </figcaption>\r\n</figure>\r\n<figcaption class=\"attachment__caption attachment__caption--edited\">Coworking.</figcaption></figure><br><br><br><figure data-trix-attachment=\"{&quot;content&quot;:&quot;<figure class=\\&quot;attachment attachment--preview attachment--jpg\\&quot;>\\n    <img src=\\&quot;http://localhost:3000/rails/active_storage/representations/eyJ8d2217/article-1.jpg\\&quot; />\\n\\n  <figcaption class=\\&quot;attachment__caption\\&quot;>\\n      Working, working, working.\\n  </figcaption>\\n</figure>\\n&quot;,&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;filename&quot;:&quot;article-1.jpg&quot;,&quot;filesize&quot;:83730,&quot;height&quot;:800,&quot;previewable&quot;:true,&quot;sgid&quot;:&quot;B1604f&quot;,&quot;url&quot;:&quot;http://localhost:3000/rails/active_storage/blobs/eyd3d/article-1.jpg&quot;,&quot;width&quot;:1200}\" data-trix-content-type=\"image/jpeg\" data-trix-attributes=\"{&quot;caption&quot;:&quot;Working, working, working.&quot;,&quot;presentation&quot;:&quot;gallery&quot;}\" class=\"attachment attachment--content attachment--jpg\"><figure class=\"attachment attachment--preview attachment--jpg\">\r\n    <img src=\"http://localhost:3000/rails/active_storage/blobs/eyd3d/article-1.jpg\" width=\"1200\" height=\"800\">\r\n\r\n  <figcaption class=\"attachment__caption\">\r\n      Working, working, working.\r\n  </figcaption>\r\n</figure>\r\n<figcaption class=\"attachment__caption attachment__caption--edited\">Working, working, working.</figcaption></figure><br><br><br></div>", "featured"=>"true", "user_id"=>"1", "image"=>"#<ImageUploader::UploadedFile:0x00007fd18d61b1e0>", "category_list"=>["Business", "Real Estate", "Investing"]} permitted: true>

Но я все еще получаю ту же ошибку. Так что, похоже, есть еще один виновник.

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

После долгих исследований и того, что кажется бесконечным методом проб и ошибок, я наткнулся на исправление.

По сути, кажется, что происходит, когда форма имеет изображение и редактируется, если существующее изображение не обрабатывается должным образом, тогда он преобразует данные cached_image в строку. Вы можете увидеть лучшее объяснение здесь .

Виновной оказалась эта строка в моей форме:

<%= f.input :image, as: :hidden, value: f.object.cached_image_data %>

Как только я изменил это на следующее, это сработало как шарм:

<%= f.input :image, as: :hidden, input_html: { value: f.object.cached_image_data } %>
0 голосов
/ 06 мая 2020

Глядя на сообщение об ошибке

783: unexpected token at '#<ImageUploader::UploadedFile:0x00007fb154adb508>'

Кажется, он никогда не попадет в пустую строку (даже если это также может привести к ошибке). При анализе параметра ImageUploader возникают проблемы.

Чтение от других пользователей с этой ошибкой. Возможно, это связано с подключаемым модулем? И анализ и преобразование этих данных не удается.

Насколько я понимаю, вы добавляете изображение или около того в поле расширенного текста формы на основе simple_form. И когда он пытается преобразовать изображение в json, это терпит неудачу.

Так что я советую взглянуть на любой камень, который у вас есть относительно загрузки изображений? Я не могу найти подобную проблему на github Simple_form, поэтому я думаю, что часть загрузчика не находится внутри самой simple_form. Но получение помощи от разработчиков Simple_form через проблему может быть хорошим способом решения этой проблемы.

...