Apa yang dilakukan helper dan helper_method?


201

helper_method mudah: itu membuat beberapa atau semua metode pengontrol tersedia untuk dilihat.

Apa helper? Apakah sebaliknya, yaitu, mengimpor metode pembantu ke file atau modul? (Mungkin nama helperdan helper_methodsama. Mereka mungkin lebih suka menjadi share_methods_with_viewdan import_methods_from_view)

referensi

Jawaban:


295

Metode helper_methodini untuk secara eksplisit berbagi beberapa metode yang didefinisikan dalam pengontrol untuk membuatnya tersedia untuk dilihat. Ini digunakan untuk metode apa pun yang perlu Anda akses dari pengontrol dan pembantu / tampilan (metode pembantu standar tidak tersedia di pengontrol). mis. kasus penggunaan umum:

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

yang helpermetode di sisi lain, adalah untuk mengimpor seluruh pembantu untuk pandangan yang diberikan oleh controller (dan itu diwariskan pengendali). Apa artinya ini lakukan

# application_controller.rb
helper :all

Untuk 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

membuat semua modul pembantu tersedia untuk semua tampilan (setidaknya untuk semua pengontrol yang diwarisi dari application_controller.

# home_controller.rb
helper UserHelper

membuat metode UserHelper tersedia untuk dilihat untuk tindakan pengontrol rumah. Ini sama dengan melakukan:

# HomeHelper
include UserHelper

20
Di Rails> = 3.1, 'helper: all' di pengontrol aplikasi diganti dengan pengaturan konfigurasi 'include_all_helpers' di application.rb. Lihat stackoverflow.com/questions/1179865 .
Jan Hettich

@ Jeremy Saya tahu posting ini sudah tua, tetapi dikatakan baik. Membantuku!
Ryan Rebo

3
Ada perbedaan antara menggunakan "penolong" dan "memasukkan" di luar gula sintaksis sederhana. "helper" membuat modul bernama tersedia untuk dilihat, dan hanya tampilan. "termasuk" membuat modul bernama tersedia untuk dilihat dan untuk pengontrol. Baik pengontrol yang diwarisi dampak dan pandangan mereka.
Richard_G

@R_G Apakah Anda memperhatikan bahwa, potongan terakhir include UserHelperada di HomeHelpermodul, bukan di controller? AFAIK, cukup dengan memasukkan modul helper di controller tidak akan membagikan metode dengan view.
Franklin Yu

@ FrankrankYu termasuk modul helper di controller sebenarnya akan berbagi metode dengan pandangan, jadi R_G benar.
Magne
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.