Що робити helper та helper_method?


201

helper_method це просто: це робить деякі або всі методи контролера доступними для перегляду.

Що таке helper? Чи навпаки, тобто імпортує допоміжні методи у файл чи модуль? (Можливо, ім'я helperі helper_methodсхожі. Вони можуть замість цього бути share_methods_with_viewі import_methods_from_view)

довідник

Відповіді:


295

Метод helper_methodполягає в тому, щоб явно ділитися деякими методами, визначеними в контролері, щоб зробити їх доступними для перегляду. Це використовується для будь-якого методу, до якого потрібно отримати доступ як з контролерів, так і з помічників / поглядів (стандартні допоміжні методи не доступні в контролерах). наприклад, звичайний випадок використання:

#application_controller.rb
def current_user
  @current_user ||= User.find_by_id!(session[:user_id])
end
helper_method :current_user

helperметод з іншого боку, для імпорту всієї помічниці поглядів , що надаються контролером (і це успадковується контролери). Що це означає, що робить

# application_controller.rb
helper :all

Для рейок> 3.1

# application.rb
config.action_controller.include_all_helpers = true
# This is the default anyway, but worth knowing how to turn it off

робить усі допоміжні модулі доступними для всіх представлень даних (принаймні для всіх контролерів, що успадковуються від application_controller.

# home_controller.rb
helper UserHelper

робить доступними для UserHelper методи перегляду для дій домашнього контролера. Це еквівалентно виконанню:

# HomeHelper
include UserHelper

20
У Rails> = 3.1 "helper: all" в контролері програми замінюється параметром конфігурації "include_all_helpers" у application.rb. Дивіться stackoverflow.com/questions/1179865 .
Ян Хеттіч

@Jeremy Я знаю, що ця публікація стара, але добре сказана. Допомогли мені!
Райан Ребо

3
Існує різниця між використанням "хелперів" і "включення" поза деяким простим синтаксичним цукром. "helper" робить іменований модуль доступним для переглядів і лише переглядів. "include" робить іменований модуль доступним для перегляду та контролерів. І вплив вплинув на спадкові контролери та їх погляди.
Richard_G

@R_G Ви помітили, що останній фрагмент include UserHelperзнаходиться в HomeHelperмодулі, а не в контролері? AFAIK, просто включивши допоміжний модуль у контролер, не поділить методи переглядами.
Франклін Ю

@FranklinYu, включаючи допоміжний модуль в контролері, буде фактично поділитися методами з видами, тому R_G є правильним.
Магне
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.