Опция :nothing устарела и будет удалена в Rails 5.1.

Этот код в рельсах 5

class PagesController < ApplicationController
  def action
    render nothing: true
  end
end

приводит к следующему предупреждению об устаревании

DEPRECATION WARNING: :nothing` option is deprecated and will be removed in Rails 5.1. Use `head` method to respond with empty response body.

Как я могу это исправить?


person Linus Oleander    schedule 09.01.2016    source источник
comment
вероятно, потому что предупреждение об устаревании говорит вам, как именно это исправить.   -  person sevenseacat    schedule 02.02.2016
comment
@sevenseacat Нет, это просто относится к head, вот и все. Вам все еще нужно искать используемый API. Обратите внимание, что это сообщение в стиле вопросов и ответов с целью быстро решить вышеуказанное предупреждение об устаревании без необходимости читать официальный API. Пост в настоящее время занимает первое место в Google по приведенному выше предупреждению, что было моей первоначальной целью.   -  person Linus Oleander    schedule 02.02.2016


Ответы (1)


Согласно источнику рельсов , это делается под капотом при прохождении nothing: true в рельсах 5.

if options.delete(:nothing)
  ActiveSupport::Deprecation.warn("`:nothing` option is deprecated and will be removed in Rails 5.1. Use `head` method to respond with empty response body.")
  options[:body] = nil
end

Поэтому простая замена nothing: true на body: nil должна решить проблему.

class PagesController < ApplicationController
  def action
    render body: nil
  end
end

в качестве альтернативы вы можете использовать head :ok

class PagesController < ApplicationController
  def action
    head :ok
  end
end
person Linus Oleander    schedule 09.01.2016
comment
render body: nil у меня сработало, render head :ok нет (выдавало какую-то двойную ошибку рендеринга). - person Fellow Stranger; 26.01.2016
comment
Если вы хотите изменить коды состояния, есть другие варианты, кроме :ok guides.rubyonrails.org/ - person TJ Biddle; 01.05.2016
comment
Вы также можете использовать head 403 или любой другой код состояния. - person Hendrik; 14.02.2017
comment
другим примером может быть head :unauthorized для возврата кода состояния 401. - person Jirapong; 22.02.2017
comment
@ Дэн, не могли бы вы объяснить, почему это предпочтительный синтаксис? С точки зрения читателя кода, для меня гораздо больше смысла render body: nil, чем head :ok. - person Erowlin; 21.04.2017
comment
@Erowlin Это интересный вопрос. Я предполагаю, что я ссылался на stackoverflow.com/a/18059789/866618, который, в свою очередь, ссылался на руководство по Rails. Ссылка на руководство по Rails изменилась с тех пор, как я прокомментировал выше, и WayBackMachine отключен, поэтому я не могу сказать вам, что тогда было сказано. Ссылка на руководство по Rails, на которую сейчас ссылаются, не очень точна... - person Dan; 21.04.2017
comment
@FellowStranger, это не render head: :ok, это head :ok. № 3_. Я тоже боролся с этим. - person ben; 16.12.2017
comment
Сбивает с толку. head не является глаголом, если вы не направляетесь в каком-то направлении; Добавление нового вызова разрешающего метода к действиям контроллера усложняет поведение; По крайней мере, использование render status: foo, body: bar позволяет разработчику, не работающему с Rails, получить шанс изучить код. - person Luke Griffiths; 16.10.2020