ผู้ช่วยเหลือและ 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

สำหรับ Rails> 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 'ผู้ช่วยเหลือ: ทั้งหมด' ในตัวควบคุมแอปพลิเคชันจะถูกแทนที่ด้วยการตั้งค่าการกำหนดค่า 'include_all_helpers' ใน application.rb ดูstackoverflow.com/questions/1179865
Jan Hettich

@ Jeremy ฉันรู้ว่าโพสต์นี้เก่า แต่ก็พูดได้ดี ช่วยฉันด้วย!
Ryan Rebo

3
มีความแตกต่างระหว่างการใช้ "ผู้ช่วย" และ "รวม" เกินกว่าน้ำตาลประโยคธรรมดาบางอย่าง "ตัวช่วยเหลือ" ทำให้โมดูลที่ตั้งชื่อพร้อมใช้งานสำหรับมุมมองและมุมมองเท่านั้น "รวม" ทำให้โมดูลที่ระบุชื่อพร้อมใช้งานสำหรับมุมมองและตัวควบคุม ทั้งสองได้รับผลกระทบสืบทอดตัวควบคุมและมุมมองของพวกเขา
Richard_G

@R_G คุณสังเกตหรือไม่ว่าข้อมูลโค้ดสุดท้ายinclude UserHelperนั้นอยู่ในHomeHelperโมดูลแทนที่จะเป็นคอนโทรลเลอร์ AFAIK เพียงรวมถึงโมดูลตัวช่วยในตัวควบคุมจะไม่แชร์วิธีการที่มีมุมมอง
Franklin Yu

@FranklinYu รวมถึงโมดูลตัวช่วยในตัวควบคุมจะแชร์วิธีการที่มีมุมมองจริงดังนั้น R_G จึงถูกต้อง
Magne
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.