Jak Ruby on Rails wykorzystuje yield do układów?

yield służy do wywołania bloku. Jak to działa w Rails gdzie yield jest używany do układów?

-# application.html.haml
%body= yield

Używa gdzieś bloków, czy metoda jest po prostu nadpisana?

Author: Shaun, 2011-02-01

2 answers

Technicznie, yield wywołuje blok również w tym kontekście. Blok jest jednak widokiem, który ma być renderowany przez akcję kontrolera.

Na przykład, załóżmy, że masz StaticContentController, który zawiera index akcję, która reprezentuje Twoją stronę główną. Po prawidłowym skonfigurowaniu tras odwiedzasz stronę główną. Rails załaduje plik układu w views/layouts, który jest odpowiedni dla tego kontrolera (application.html.haml, chyba że przepisz to układem dla kontrolera). Gdy osiągnie yield polecenie, wstawia widok w views/static_content/index.html.haml w miejscu, w którym yield znajduje się wewnątrz układu. Następnie ładuje resztę pliku układu.

 18
Author: Shaun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-31 23:36:00

Domyślnie wszystkie funkcje Rubiego mogą być przekazywane w bloku:

def twice
  yield
  yield
end

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

Najlepszym sposobem myślenia o układzie jest metoda, która jest wywoływana z blokiem.

Kiedy Rails renderuje szablon, to wywołuje wywołanie Layout#render. Layout#render akceptuje domyślny blok. Domyślnie Rails przekazuje Widok jako ten blok. Oznacza to, że wywołanie wydajności z wnętrza układu jest jak wywołanie domyślnego bloku, który w tym przypadku jest Twoim widokiem.

 8
Author: Pan Thomakos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-01 00:20:48