「:nothing」オプションは廃止予定であり、Rails 5.1で削除されます


108

Rails 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.

どうすれば修正できますか?


2
なぜこれは反対票が投じられたのですか?
Linus Oleander

3
おそらく非推奨の警告がそれを修正する方法を正確に伝えるからです。
sevenseacat 2016

24
@sevenseacatいいえ、それは単にを参照しているだけheadです。使用されているAPIを調べる必要があります。これはQ&Aスタイルの投稿であり、公式APIを読まなくても上記の非推奨警告をすばやく解決することを目的としています。投稿は現在、私の最初の目標であった上記の警告でグーグルでナンバーワンになっています。
Linus Oleander

回答:


171

レールソースによると、これは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

16
headこの方法は、好適な構文です。ずっときれい。
Dan

3
render body: nil私にとっては機能しましたが、機能render head :okしませんでした(二重のレンダリングエラーが発生しました)。
フェローストレンジャー

13
ステータスコードを変更する場合は、:ok guides.rubyonrails.org /…
TJ Biddle

2
もう1つの例は、head :unauthorizedステータスコード401
Jirapongを

14
@FellowStrangerが、それはありませんrender head: :ok、それはですhead :ok。いいえrender。私も苦労しました。
2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.