2011-01-31 12 views

Odpowiedz

18

Technicznie, yield również wywołuje blok w tym kontekście. Jednak blok jest widokiem, do którego działania kontrolera miały zostać renderowane.

Na przykład, powiedzmy, że masz StaticContentController, który ma akcję index reprezentującą twoją stronę główną. Przy prawidłowo skonfigurowanych trasach odwiedzasz swoją stronę główną. Railsy załadują plik layoutu w views/layouts, który jest odpowiedni dla tego kontrolera (application.html.haml, chyba że przesłoniłeś to układem twojego kontrolera). Po dojściu do polecenia yield wstawia widok views/static_content/index.html.haml w miejscu, w którym yield znajduje się w układzie. Następnie ładuje resztę pliku układu.

8

Domyślnie wszystkie funkcje Ruby mogą być przekazywane do bloku:

 
def twice 
    yield 
    yield 
end 

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

Najlepszym sposobem, aby myśleć o układ jest to metoda, która jest wywoływana z bloku.

Kiedy Railsy renderują szablon, wywołuje on wywołanie Layout # render. Układ # render akceptuje domyślny blok. Domyślnie Railsy przekazują widok jako ten blok. Oznacza to, że wywoływanie zysku z twojego układu jest jak wywoływanie domyślnego bloku, którym w tym przypadku jest twój widok.