Rails 3: правильный способ удаления ресурса с использованием response_with - PullRequest
11 голосов
/ 15 февраля 2011

Я пытаюсь высушить контроллер, добавив 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 Ответ

5 голосов
/ 15 февраля 2011

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

head :ok
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...