11

Sto provando a ASCIUGARE un controller incorporando respond_with. Quando lo faccio, seguendo alcune istruzioni in un Railscast, ottengo le cose per lo più funzionanti. Il problema si trova nel reindirizzamento dopo lo che elimina una risorsa ... che dovrebbe essere reindirizzata a people_url ... ma tenta invece di caricare la risorsa specifica.Rails 3: modo corretto per eliminare la risorsa utilizzando respond_with

Il codice di esempio ho trovato aspetto come questo ... ma non riesce il tentativo di caricare la risorsa appena cancellato:

# 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 

cambiamento che l'ultima linea per respond_with(@people) non funziona neanche (anche se avevo sperato sarebbe ...)

Dopo molte scavare intorno e cercando il mio meglio per capire cose che ho fatto far funzionare le cose (almeno sembrerebbe così specifiche passando app funzionale) con questo:..

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

Quindi, questo è il modo corretto per gestire questo? Sembra che con tutta la "magia" dietro respond_with saprebbe che non può reindirizzare a se stesso dopo un'eliminazione? Ho anche pensato che questo (uno dei 7 metodi RESTful CRUD di base) sarebbe piuttosto semplice e rudimentale, quindi abbondanza di esempi sarebbero abbondanti ... ma non sono stato in grado di trovarne molti eccetto quelli che suggeriscono il codice che non ha funzionato me.

Sperando che qualcuno possa aiutarmi a capire la "magia" delle rotaie che si sta verificando qui, quindi non sarò sorpreso quando questo mi esploderà lungo la strada.

risposta

5

Si sta tentando di rispondere con una risorsa che è stata cancellata. Questo è il problema. In casi come la cancellazione, le risposte di solo intestazione funzionano. L'impostazione dello stato dell'intestazione della richiesta su :ok è sufficiente.

head :ok 
+2

Grazie ma, purtroppo, sono ancora confuso. stai suggerendo 'reply_with (head: ok)'? perché quello non funziona Ho solo familiarità con 'format.xml {head: ok}' quando si trova all'interno di un blocco 'reply_to'. quindi non sei sicuro di come farlo usando 'respond_with' in questo caso?!? – Meltemi

+0

@Meltemi - Scopri ASCIICast da Ryan Bates: http://asciicasts.com/episodes/224-controllers-in-rails-3 – dennismonsewicz