Helper ve helper_method ne yapar?


201

helper_method basittir: denetleyicinin yöntemlerinin bir kısmını veya tamamını görünüme sunar.

Nedir helper? Bunun tersi mi, yani yardımcı yöntemleri bir dosyaya veya bir modüle aktarıyor mu? (Belki isim helperve helper_methodbenzerdir. Bunun yerine share_methods_with_viewve olabilirler import_methods_from_view)

referans

Yanıtlar:


295

Yöntem helper_method, görünümde kullanılabilir hale getirmek için denetleyicide tanımlanan bazı yöntemleri açıkça paylaşmaktır. Bu, hem denetleyicilerden hem de yardımcılardan / görünümlerden erişmeniz gereken herhangi bir yöntem için kullanılır (denetleyicilerde standart yardımcı yöntemler kullanılamaz). örneğin ortak kullanım durumu:

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

helperÖte yandan usul olup, kontrol birimi tarafından temin görüşlerine tüm yardımcı aktarmak için (ve bu denetleyicileri kalıtımsal). Bunun anlamı ne

# application_controller.rb
helper :all

Raylar için> 3.1

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

tüm yardımcı modülleri tüm görünümler için kullanılabilir hale getirir (en azından application_controller öğesinden devralınan tüm denetleyiciler için).

# home_controller.rb
helper UserHelper

UserHelper yöntemlerini ana denetleyicinin eylemleri için görüntülenebilir hale getirir. Bu yapmaya eşdeğerdir:

# HomeHelper
include UserHelper

20
Rails> = 3.1'de, uygulama denetleyicisindeki 'helper: all', application.rb içindeki 'include_all_helpers' yapılandırma ayarıyla değiştirilir. Bkz. Stackoverflow.com/questions/1179865 .
Jan Hettich

@Jeremy Bu yazının eski olduğunu biliyorum, ama iyi dedi. Bana yardımcı oldu!
Ryan Rebo

3
Bazı basit sözdizimsel şekerin ötesinde "yardımcı" ve "içerir" arasında bir fark vardır. "helper", adlandırılan modülü yalnızca görünümler için kullanılabilir hale getirir. "include", adlandırılmış modülü görünümler ve denetleyiciler için kullanılabilir hale getirir. Her ikisi de miras alınan denetleyicileri ve görüşlerini etkiler.
Richard_G

@R_G Eğer son pasajı fark mü include UserHelperolduğu HomeHelperyerine denetleyicisi, modülün? AFAIK, yardımcı modülün denetleyiciye dahil edilmesi, yöntemleri görünümlerle paylaşmaz.
Franklin Yu

Denetleyicideki yardımcı modülü içeren @FranklinYu, yöntemleri gerçekten görünümlerle paylaşır, bu nedenle R_G doğrudur.
Magne
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.