Почему сервер дважды обрабатывает действие show в rails? - PullRequest
0 голосов
/ 27 апреля 2018
Started GET "/microposts/29" for 127.0.0.1 at 2018-04-27 22:08:41 +0800
Processing by MicropostsController#show as HTML

один раз ...

Started GET "/microposts/29" for 127.0.0.1 at 2018-04-27 22:08:41 +0800
Processing by MicropostsController#show as */*

второй раз.

Я создал модель микросообщений с rails g scaffold, сервер настроен по умолчанию, действия по индексированию, созданию и редактированию обрабатываются один раз.

Я не знаю, почему действие show дважды обрабатывалось сервером? Кто-нибудь может мне с этим помочь? (ruby 2.3.3, рельсы 5.0.1)

1 Ответ

0 голосов
/ 27 апреля 2018

Некоторые браузеры (Safari) отправляют Accept */*, который не отображается в формате html, и по какой-то причине (в алфавитном порядке?) Отображается в формате js. Затем включается protect_from_forgery, и так как этот запрос не имеет X-Requested-With (зачем это? Это обычный get), браузер возвращается с ответом 422.

Технически это не проблема с Rails, а с браузером,

Вы можете избавиться от этого, изменив блок respond_to do |format|... end (я думаю, в создании и обновлении действия, из которого он был перенаправлен, чтобы показать действие.) Строка комментария для format.js или format.json

Или, в контроллере:

before_action do
  if request.format == Mime::ALL
    request.format = request.xhr? ? :js : :html
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...