Domanda

Al termine di una delle mie azioni di controllo ho bisogno di reindirizzare a una pagina che accetta solo richieste PUT. Ho cercato di capire come ottenere redirect_to utilizzare una richiesta put, ma senza alcun successo.

È possibile? O c'è un altro modo per ottenere questo?

È stato utile?

Soluzione 3

Ok, così ho trovato una soluzione al mio problema. Ho trovato un ottimo scrittura sulla situazione qui . La mia applicazione si presenta così:

private
def redirect_post(redirect_post_params)
  controller_name = redirect_post_params[:controller]
  controller = "#{controller_name.camelize}Controller".constantize
  # Throw out existing params and merge the stored ones
  request.parameters.reject! { true }
  request.parameters.merge!(redirect_post_params)
  controller.process(request, response)
  if response.redirected_to
    @performed_redirect = true
  else
    @performed_render = true
  end
end

Poi ho chiamato questo metodo come questo:

  redirect_post :controller => 'registrations', :action => 'order', :_method => 'put', :authenticity_token => params[:authenticity_token]

Così sono stato in grado di 'falso' una richiesta put facendo una richiesta POST (utilizzando redirect_post) e poi l'assegnazione di 'mettere' a un param _method. Se si guarda a un normale put richiesta di tutto si tratta di un post da un modulo con un param <=>. Così la sua un po 'hacker ma ottiene il lavoro fatto.

Inoltre, è necessario fare in modo che quando si chiama <=> i valori della vostra hash sono stringhe altrimenti saranno gettati errori.

Altri suggerimenti

Non credo che siete in grado di fare questo, e ho il sospetto che la limitazione è parte di HTTP per sé.

Quando si utilizza redirect_to -. Il reindirizzamento avviene come "302 Spostato" header salvo diversamente specificato nei parametri

Avere uno sguardo al HTTP Spec in sé non rivela alcun modo per cambiare il tipo di richiesta il browser effettua tramite reindirizzamento.

reindirizzamenti HTTP :

  

Questa classe di codice di stato indica   che l'ulteriore azione deve essere presa   dal programma utente al fine di adempiere   la richiesta. L'azione richiesta MAGGIO   essere effettuata dal programma utente   senza interazione con l'utente se   e solo se il metodo utilizzato nella   seconda richiesta è GET o HEAD.

Credo che potrebbe essere necessario utilizzare JavaScript per ottenere questa funzionalità, o forse ripensare il flusso di controllo nell'applicazione.

Se l'azione è nella stessa controller come in cui si sta cercando di reindirizzare da, è sufficiente chiamare l'azione e rendere il modello in questo modo:

def show
  index
  render :action => "index"
end

Se non lo è, allora non so come farlo.

Si potrebbe reindirizzare a una pagina diversa che emette la richiesta put da parte del cliente, utilizzando Javascript .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top