Opcja „: nic” jest przestarzała i zostanie usunięta w Railsach 5.1

108

Ten kod w szynach 5

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

powoduje wyświetlenie następującego ostrzeżenia o wycofaniu

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

Jak to naprawić?

Linus Oleander
źródło
2
Dlaczego ten głos został odrzucony?
Linus Oleander,
3
prawdopodobnie dlatego, że ostrzeżenie o zaniechaniu mówi dokładnie, jak to naprawić.
sevenseacat
24
@sevenseacat Nie, to tylko odnosi się do head, to wszystko. Nadal musisz sprawdzić używany interfejs API. Zwróć uwagę, że jest to post w stylu pytań i odpowiedzi, którego celem jest szybkie rozwiązanie powyższego ostrzeżenia o wycofaniu bez konieczności czytania przez oficjalny interfejs API. Ten post jest obecnie na pierwszym miejscu w Google na powyższe ostrzeżenie, co było moim początkowym celem.
Linus Oleander

Odpowiedzi:

171

Według źródła szyn odbywa się to pod maską podczas przejazdu przez nothing: trueszyny 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

Wystarczy zastępując nothing: trueze body: nilpowinno rozwiązać problem.

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

alternatywnie możesz użyć head :ok

class PagesController < ApplicationController
  def action
    head :ok
  end
end
Linus Oleander
źródło
16
headMetoda jest korzystna składni. Dużo czystsze.
Dan
3
render body: nilzadziałało dla mnie, render head :oknie (spowodowało to podwójny błąd renderowania).
Fellow Stranger
13
Jeśli chcesz zmienić kody statusu, są opcje inne niż tylko :ok guide.rubyonrails.org/…
TJ Biddle
2
innym przykładem może być head :unauthorizedzwrócenie kodu statusu 401
Jirapong
14
@FellowStranger, to nie jest render head: :ok, to jest head :ok. Nie render. Ja też z tym walczyłem.
ben