Helper - sposób połączenia z MVC

Interesuje mnie w jaki sposób metody zdefiniowane w helpersach, albo raczej całe moduły są łączone z całością aplikacji.

Po kilku własnych przykładach widzę, że zmienne instancji definiowane w metodach kontrolera są dostępne w metodach w helpersach, o ile metoda nie jest zadeklarowana jako klasowa. Natomiast metody zdefiniowane w helpersach są dostępne w kontrolerze i odpowiednich widokach.

Czy w takim razie każdy moduł helpersa jest includowany do odpowiedniego kontrolera automatycznie przez aplikację Rails na podstawie nazwy? Przykładowo moduł z pliku application_helpers jest includowany do kontrolera w pliku application_controller?

Nie do kontrolera, a do instancji widoku, która odpowiada za wyrenderowanie strony wynikowej. A tak poza tym to dobrze rozumujesz :slight_smile:

Sugerowałem się tym, że wywołanie w rails console kodu:
ApplicationController._helpers.instance_methods pokazuje metody zdefiniowane w helpersach, jednak nie można ich wywołać z kontrolera.
Jeżeli jest to po prostu sposób Rails na przekazanie helpersów do instancji widoku, to nie będę się już w to zagłębiał.

Dostęp do tych metod możesz mieć po dołączeniu modułu z helperami do kontekstu, z którego próbujesz je wywołać. Tak na przykład testuje się helpery.

Generalnie jednak, jeśli coś jest helperem widoku, to nie powinno być wykorzystywane poza nim.