L'option «: rien» est obsolète et sera supprimée dans Rails 5.1

108

Ce code dans les rails 5

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

entraîne l'avertissement d'obsolescence suivant

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

Comment puis-je réparer ça?

Linus Oleander
la source
2
Pourquoi ce vote a-t-il été rejeté?
Linus Oleander
3
probablement parce que l'avertissement d'obsolescence vous indique exactement comment y remédier.
sevenseacat
24
@sevenseacat Non, cela fait simplement référence à head, c'est tout. Vous devez toujours rechercher l'API utilisée. Notez qu'il s'agit d'un article de style questions-réponses dans le but de résoudre rapidement l'avertissement de désapprobation ci-dessus sans avoir à lire l'API officielle. Le message est actuellement en train de ratisser le numéro 1 sur Google sur l'avertissement ci-dessus, qui était mon objectif initial.
Linus Oleander

Réponses:

171

Selon la source des rails , cela se fait sous le capot lors du passage nothing: truedans les rails 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

Le simple remplacement nothing: truepar body: nildevrait donc résoudre le problème.

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

vous pouvez également utiliser head :ok

class PagesController < ApplicationController
  def action
    head :ok
  end
end
Linus Oleander
la source
16
La headméthode est la syntaxe préférée. Beaucoup plus propre.
Dan
3
render body: nila fonctionné pour moi, render head :okn'a pas (cela a donné une erreur de double rendu).
Fellow Stranger
13
Si vous souhaitez modifier les codes de statut, il existe des options autres que juste :ok guides.rubyonrails.org
TJ Biddle
2
un autre exemple serait head :unauthorizedde renvoyer le code d'état 401
Jirapong
14
@FellowStranger, ce n'est pas render head: :ok, c'est head :ok. Non render. J'ai eu du mal avec ça aussi.
ben