“: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 '16

24
@sevenseacat不,它仅指,仅此而已head。您仍然必须查找正在使用的API。请注意,这是一篇问答式的文章,旨在快速解决上述弃用警告,而无需通读官方API。目前,以上警告已在Google上排名第一,这是我最初的目标。
Linus Oleander

Answers:


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方法是首选语法。清洁得多。

3
render body: nil为我工作,render head :ok没有(它给了一些双重渲染错误)。
陌生人研究员

13
如果你想改变状态码,也不仅仅是其他选项:ok guides.rubyonrails.org/...
TJ比德尔

2
另一个例子是head :unauthorized返回状态码401
Jirapong'2

14
@FellowStranger,不是render head: :ok,是head :ok。没有render。我也为此感到挣扎。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.