2009-12-24 9 views
58

Uno degli oggetti del mio modello ha una colonna "testo" che contiene l'intero codice HTML di una pagina Web.Come restituire l'HTML direttamente da un controller Rails?

Mi piacerebbe scrivere un'azione controller che restituisca semplicemente questo codice HTML direttamente dal controller piuttosto che passarlo attraverso i modelli .erb come il resto delle azioni sul controller.

Il mio primo pensiero è stato quello di inserire questa azione in un nuovo controller e creare un modello .erb personalizzato con un layout vuoto, e solo <%= modelObject.htmlContent %> nel modello - ma mi chiedevo se ci fosse un modo migliore per farlo in Rails.

risposta

83

nel blocco di controllo respond_to, è possibile utilizzare:

render :text => @model_object.html_content 

o:

render :inline => "<%= @model_object.html_content %>" 

Quindi, qualcosa di simile:

def show 
    @model_object = ModelObject.find(params[:id]) 

    respond_to do |format| 
    format.html { render :text => @model_object.html_content } 
    end 
end 
+4

(Sparse) Documentazione a http://api.rubyonrails.org/classes/ActionView/Rendering .html nel caso in cui qualcun altro lo stia cercando! :) –

+5

È davvero necessario utilizzare il blocco 'reply_to'? 'render: text => '

text

'' funziona perfettamente per me in Rails 4. Io però 'respond_to' era solo per gestire più Accept-Types. –

+1

Rails 5 genera un avviso di deprecazione quando si utilizza 'render text: ...'. Se vuoi eseguire il rendering HTML, usa 'render html: ...', per il testo usa 'render plain: ...'. –

3

sue opere per me

def show 
    @model_object = ModelObject.find(params[:id]) 

    respond_to do |format| 
    format.html { render :inline => "<%== @model_object['html'] %>" } 
    end 
end 
38

In tutte le Rails (4.1.x), per lo meno, questo è molto più semplice che la risposta accettata:

def show 
    render html: '<div>html goes here</div>'.html_safe 
end 
+1

grazie mille, funziona anche su rails 5 api-only :) –

Problemi correlati