2011-01-31 9 views

risposta

18

Tecnicamente, yield chiama anche un blocco in questo contesto. Tuttavia, il blocco è la vista che l'azione del controllore è stata detta per il rendering.

Ad esempio, supponiamo di avere un StaticContentController con un'azione index su di esso che rappresenta la tua home page. Con le rotte configurate correttamente, visiti la tua home page. Rails caricherà il file di layout in views/layouts appropriato per quel controller (application.html.haml, a meno che non si esegua l'overroding con un layout per il controller). Quando raggiunge il comando yield, inserisce la vista allo views/static_content/index.html.haml nel punto in cui il layout è yield. Quindi carica il resto del file di layout.

8

Per default tutte le funzioni rubino possono essere passati un blocco:

 
def twice 
    yield 
    yield 
end 

> twice { print 'hi ' } 
=> hi hi 

Il modo migliore per pensare a un layout è un metodo che viene chiamato con un blocco.

Quando Rails esegue il rendering di un modello, effettua effettivamente una chiamata al rendering # del layout. Layout # render accetta un blocco predefinito. Di default Rails passa la tua vista come questo blocco. Ciò significa che il rendimento delle chiamate all'interno del tuo layout è come chiamare il blocco predefinito, che in questo caso è la tua vista.