Ho un controller di rail con un blocco rescue_from
in cui chiamo render
.request.format in rescue_from block
class SomeController < ApplicationController
rescue_from Some::Error, :some_error
private
def some_error error
@error = error
render 'error'
end
end
La cosa strana è che, anche se ho una vista error.js.erb
, rotaie utilizzeranno sempre error.html.erb
, anche se la richiesta è un JS
:
Started GET /some/1
Processing by SomeController#show as JS
...
Rendered some/error.html.erb
Non come nel registro accorciato sopra c'è scritto viene visualizzato come JS, ma utilizza ancora il file HTML. Il numero .js.erb
si trova nella posizione corretta e il rendering delle viste JS quando non è presente il numero rescue_from
funziona correttamente.
Cosa sta succedendo qui?
Update 1: Ho creato un test repository per dimostrare il problema
Update 2ho trovato una soluzione (vedi sotto). Qualcuno può venire con una soluzione più generica come quella qui sotto, o puoi dire il mio perché questa sarebbe impossibile o una pessima idea? La taglia è ancora aperta.
- Avrebbe senso per creare una richiesta di pull per impostare
self.formats
inActionController::Rescue.process_action
o - diventare matto e cercare di riprendere la pila di un livello più profondo in cui è stata sollevata l'errore
Hai provato l'errore 'render ', format: request.format'? – eirikir
Ho aggiornato la domanda con un collegamento a un repository di test. Se aggiungo 'formats: request.format' verrà generato un errore che dice che non è possibile trovare un modello da renderizzare. – amiuhle