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)
тоже не работает (хотя я надеялся, что это будет...)
После долгих поисков и попыток изо всех сил понять вещи, которые я действительно заставил работать (по крайней мере, это будет выглядеть так: спецификации передаются. Приложение функционирует) с этим:
respond_with(@person, :location => people_url) # <== now it works
Итак, это правильный способ справиться с этим? Кажется, что со всей "магией" позади response_with он знал бы, что не может перенаправить к себе после удаления? Я также подумал, что это (один из 7 основных методов RESTful CRUD) будет довольно простым и рудиментарным, поэтому будет множество примеров... но я не смог найти многих, кроме тех, которые предлагают код, который не работал для мне.
Надеюсь, что кто-то может помочь мне понять "магию" рельсов, которая здесь происходит, поэтому я не удивлюсь, когда это обрушится на меня в будущем.
1 ответ
Вы пытаетесь ответить с помощью ресурса, который удален. Вот в чем проблема. В таких случаях, как удаление, работают только заголовки ответов. Установка статуса заголовка запроса в :ok
достаточно.
head :ok