Подтвердить что ты не робот

В Rails 3, response_to и format.all работают иначе, чем Rails 2?

код

respond_to do |format|
  format.html
  format.json { render :json => @switches }
  format.xml { render :xml => @switches.to_xml }
  format.all { render :text => "only HTML, XML, and JSON format are supported at the moment." }
end

выше будет работать в Rails 2.2.2. Но в Rails 3 получение контроллера /index.html или индекса в браузере обойдется в последнюю строку: "В настоящий момент поддерживаются только формат HTML и JSON".

Единственный документ Rails, который я могу найти на нем, -

http://api.rubyonrails.org/classes/ActionController/MimeResponds/ClassMethods.html#method-i-respond_to

ток которого только устанавливает:

respond_to :html, :xml, :json

но им нужны отдельные шаблоны для json и xml и не могут обрабатывать случай "только HTML и JSON-формат в данный момент".

4b9b3361

Ответ 1

В rails3 вы должны написать:

respond_with(@switches) do |format|
  format.html
  format.json { render :json => @switches }
  format.xml  { render :xml  => @switches }
  format.all  { render :text => "only HTML, XML, and JSON format are supported at the moment." }
end

Но это работает только в соответствии с блоком respond_to в верхней части файла, детализируя ожидаемые форматы. Например.

respond_to :xml, :json, :html

Даже в этом случае, если кто-либо, например, запрашивает формат js, запускается блок any.

Вы также можете использовать только respond_to, как показано ниже:

@switches = ...
respond_to do |format|
  format.html {render :text => 'This is html'}
  format.xml  {render :xml  => @switches}
  format.json {render :json => @switches}
  format.all  {render :text => "Only HTML, JSON and XML are currently supported"}
end

Надеюсь, что это поможет.

Ответ 2

Вам может показаться полезным посмотреть этот эпизод railscasts, который иллюстрирует изменения в контроллерах в Rails 3 и, в частности, изменения класса responder (поместить response_to в класс контроллера и только с помощью response_with @object в действии ):

http://railscasts.com/episodes/224-controllers-in-rails-3

Ответ 3

Следующие работы для меня. Я считаю, что вам нужно явно указать часть "render" для html или использовать format.any.

respond_to do |format|
  format.html { render :html => @switches }
  format.json { render :json => @switches }
  format.xml  { render :xml  => @switches }
  format.all  { render :text => "we only have html, json, and xml" }
end