2013-01-11 10 views
14

Provate semplicemente una semplice app per rails, principalmente per un backend API con JSON, pesante app lato client. Quindi quello che voglio fare è solo rendere il layout, e avere codice javascript per gestire l'url, e fare la richiesta ajax per ottenere i dati JSON. Il seguente sembra funzionare:Solo layout di rendering delle guide?

respond_to do |format| 
    format.html { render :nothing => true, :layout => true } 
end 

Tuttavia, poiché nulla è pensato per non rendere nulla, sembra piuttosto sbagliato. C'è un modo più corretto per rendere solo il layout? Si noti che il mio layout non ha un rendimento.

risposta

3

Prova questo, questo renderà la risposta a un file chiamato sample.html che potrebbe essere un file html statico.

e anche si potrebbe avere il file in una posizione comune, in modo che si potrebbe caricare a tutte le azioni

avere il vostro contenuto statico in questa pagina, e se avete bisogno di una pagina dinamica si potrebbe avere un .erb pagina troppo

nel metodo

def index 
    @posts = Post.all 

    respond_to do |format| 
     format.html {render :file => "posts/sample"} 
     format.json { render json: @posts } 
    end 
end 

/post/sample.html 

HTH

+0

La mia preoccupazione per questo sta tornando dati non necessari. Ho pensato anche a ': text =>" "' come opzione, ma di nuovo hai bisogno di ': layout => true' dato che di default rende solo il testo. – agmcleod

+0

non puoi avere una pagina html statica vuota con un messaggio (o qualcosa del genere), o potresti spiegare che cosa l'utente deve vedere quando colpisce questa azione! (o avere tutti i css e js nel file statico e senza usare un layout) – sameera207

+0

Che potrebbe funzionare anche :). Un mio collega stava anche suggerendo di fare l'aspetto di front end in sinatra, e avere i binari come pura API. – agmcleod

0

Credo che se l'applicazione recupera solo JSON dal server, il formato deve essere json e non html.

respond_to do |format| 
    format.json @your_collection 
end 

Oppure inserire il formato per tutte le azioni nel controller e solo rispondere con gli oggetti.

+0

Il problema che risponde agli URL regolare. Non voglio duplicare le viste haml e JST. Diciamo che ho un semplice blog con un controller di post. Quindi per accedere direttamente a un post, andresti su '/ posts/1'. Quindi, ciò che deve fare è rendere il layout. Se rispondo semplicemente con JSON e non dico qualcosa per la risposta HTML, allora '/ posts/1' genera un errore di modello. – agmcleod

+0

Hmm, pensavo che avresti gestito il codice DOM con solo javascript. Come sostituire l'html basato sul json dal server. – MurifoX

+0

Puoi. Ma poi diventa più complicato quando si cerca di sostituire il contenuto tramite clic del collegamento e cosa no. Quando un'app diventa più grande diventa complicata. Sto cercando di aggirare questa mentalità, e fare pratica con questo stile, così posso far crescere questa app in qualcosa. – agmcleod

5
render :file => "layout_file", :layout => false 
+0

Questa è un'opzione interessante pure. Mi chiedo se c'è un rovescio della medaglia che non pensa che sia un layout. – agmcleod

25

Bene, questo ha lavorato per me in Rails 4.0:

render :text => "", :layout => true 
+0

Questo sembra solo un modo hacky per rendere il layout senza input – Jay

+3

Questo genererà un avviso di deprecazione in Rails 5. È possibile utilizzare 'render html: '', layout: true' per ottenere lo stesso risultato. – Sebastian

4

avevo bisogno di qualcosa similar-- per visualizzare un modello di layout senza parziale (lato client in cui vengono gestiti i parziali).

rails 4.2.0

respond_to do |format| 
    format.html { render text: nil, layout: true } 
end 
+0

Sebbene questa risposta sia probabilmente corretta e utile, è preferibile includere alcune spiegazioni e spiegare in che modo aiuta a risolvere il problema. Ciò diventa particolarmente utile in futuro, se c'è un cambiamento (possibilmente non correlato) che lo fa smettere di funzionare e gli utenti devono capire come funzionava una volta. –

0

(Copia commento di Vasile per una migliore visibilità.)

per Rails 5.1, al fine di rendere il layout senza la necessità di un modello di vista, è necessario utilizzare

def index 
    render html: '', layout: true 
end 

o con un layout personalizzato

def index 
    render html: '', layout: 'mylayout' 
end 

Quanto segue non funziona:

render text: '', layout: 'mylayout' vi darà un errore perché il modello di vista index.html.haml non esiste.

render nothing: true, layout: 'mylayout' ti darà un errore perché nothing:true è deprecato e il modello index non esiste (tuttavia, questo funziona nei binari 4.2)

render body: '', layout: 'mylayout' renderà '' (senza layout)

render plain: '', layout: 'mylayout' renderà '' (senza layout)

Problemi correlati