2013-03-05 12 views
7

Ho appena avviato Ruby on Rails ieri. Nel mio layout/application.html.erb ho:Layout multipli in ror

<!DOCTYPE html> 
<html> 
    <head> 
    <title><%= full_title(yield(:title)) %></title> 
    <%= stylesheet_link_tag "application", media: "all" %> 
    <%= javascript_include_tag "application" %> 
    <%= csrf_meta_tags %> 
    </head> 
    <body> 
    <%= render 'layouts/header' %> 
    <div class="container"> 
     <%= yield %> 
    </div> 
    <%= render 'layouts/footer' %> 
    </body> 
</html> 

Venendo da PHP -> CodeIgniter sfondo, sto supponendo di rendering è simile a $ this-> load-> view (''); in codeigniter.
Anche se questo funziona bene, mi piacerebbe avere i file di layout domanda multipla ad esempio

  1. di default layout/applicazione
  2. layout/applicazione fullwidth (per le pagine Tutta Larghezza)
  3. e così via ..

In codeigniter si dichiara semplicemente quale dei modelli/file di layout si desidera utilizzare ma come ruby ​​on rails è un po 'magico (ne fa un sacco di cose), presumo che chiami il layout dell'applicazione da de colpa. Mi stavo chiedendo se c'è un modo per scegliere quale file di layout voglio?

risposta

8

Stai cercando il metodo layout.

This Rails Guide ti aiuterà, in particolare Finding Layouts. Fornirei maggiori dettagli qui, ma la documentazione e la guida menzionate in precedenza forniscono più di sufficienti esempi e istruzioni sull'uso.

+0

Oh grazie, e ho pensato di aver finito di leggere quella pagina. – Skyalchemist

14

@Deefour dato le giuste risorse, ecco un bel esempio veloce su come si può implementare questo in Rails 4.

In un controller è possibile specificare dove si vuole andare a prendere quello che il layout per una certa azione e hanno controllo a grana fine molto fine su quale sia il layout utilizzato.

class PagesController < ApplicationController 
    layout "fullwidth", except: [:index, :faqs] 

    def popout 
    # Render this action with specific layout 
    render layout: "popout" 
    #renders with views/layouts/popout.html.erb 
    end 

    def index 
    #renders with views/layouts/application.html.erb 
    end 

    def about_us 
    #renders with views/layouts/fullwidth.html.erb 
    end 

    def team 
    #renders with views/layouts/fullwidth.html.erb 
    end 

    def logo 
    #renders with views/layouts/fullwidth.html.erb 
    end 

    def faqs 
    #renders with views/layouts/application.html.erb 
    end 
end 

application.html.erb è il file di layout standard rotaie. Presumo che sia presente, ed è il fallback di default!

+0

Tutti i non definiti eseguono il fallback su application.html.erb? –

+0

'' 'application.html.erb''' è il file di layout standard delle guide. Presumo che sia presente, ed è il fallback di default, sì. – mahatmanich