Rails 3: правильный способ удаления ресурса с помощью response_with

Я пытаюсь высушить контроллер, включив respond_with. Когда я это делаю, следуя некоторым инструкциям в Railscast, я получаю работу в основном. Проблема заключается в перенаправлении после удаления ресурса... который должен быть перенаправлен на people_url... но вместо этого пытается загрузить определенный ресурс.

Образец кода, который я нашел, выглядит так... Но он не пытается загрузить ресурс, который он только что удалил:

# app/controllers/people_controller.rb
class PeopleController < ApplicationController
  respond_to :html, :xml

  def destroy
    @person = Person.find(params[:id])
    flash[:notice] = 'Successfully deleted person.' if @person.destroy
    respond_with(@person)  # <== spec fails here
  end
end

изменение этой последней строки на respond_with(@people) тоже не работает (хотя я надеялся, что это будет...)

После долгих поисков и попыток изо всех сил понять, что я делал, чтобы работать (по крайней мере, это было бы так. specs through. app functional) с этим:

respond_with(@person, :location => people_url)  # <== now it works

Итак, это правильный способ справиться с этим? Кажется, что со всем "волшебством", стоящим за ответчиком, он знал, что не может перенаправить себя после удаления? Я также подумал, что это (один из 7 основных методов RESTful CRUD) будет довольно простым и рудиментарным, поэтому будет много примеров... но я не смог найти много, кроме тех, которые предлагают код, который не работает для меня.

Надеясь, что кто-то может помочь мне понять волшебство рельсов, которое происходит здесь, поэтому я не удивлюсь, когда это ударит меня по дороге.

Ответ 1

Вы пытаетесь ответить удаленным ресурсом. Вот в чем проблема. В таких случаях, как удаление, работают только ответы заголовка. Устанавливать статус заголовка запроса на :ok достаточно.

head :ok