Người trợ giúp và người trợ giúp_method làm gì?


201

helper_method rất đơn giản: nó làm cho một số hoặc tất cả các phương thức của bộ điều khiển có sẵn để xem.

helpergì Có phải nó là cách khác, tức là, nó nhập các phương thức của trình trợ giúp vào một tệp hoặc một mô-đun? (Có thể tên helperhelper_methodgiống nhau. Thay vào đó họ có thể share_methods_with_viewimport_methods_from_view)

tài liệu tham khảo

Câu trả lời:


295

Phương pháp helper_methodnày là để chia sẻ rõ ràng một số phương thức được xác định trong bộ điều khiển để làm cho chúng có sẵn cho khung nhìn. Phương thức này được sử dụng cho bất kỳ phương thức nào bạn cần truy cập từ cả bộ điều khiển và người trợ giúp / chế độ xem (phương thức trợ giúp tiêu chuẩn không có sẵn trong bộ điều khiển). ví dụ: trường hợp sử dụng phổ biến:

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

mặt khác, helperphương thức này là để nhập toàn bộ trình trợ giúp vào các khung nhìn được cung cấp bởi bộ điều khiển (và nó là bộ điều khiển được kế thừa). Điều này có nghĩa là làm gì

# application_controller.rb
helper :all

Đối với đường ray> 3.1

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

làm cho tất cả các mô-đun trợ giúp có sẵn cho tất cả các chế độ xem (ít nhất là cho tất cả các bộ điều khiển kế thừa từ application_controll.

# home_controller.rb
helper UserHelper

làm cho các phương thức UserHelper có sẵn để xem các hành động của bộ điều khiển gia đình. Điều này tương đương với việc làm:

# HomeHelper
include UserHelper

20
Trong Rails> = 3.1, 'helper: all' trong bộ điều khiển ứng dụng được thay thế bằng cài đặt cấu hình 'include_all_helpers' trong application.rb. Xem stackoverflow.com/questions/1179865 .
Jan Hettich

@Jeremy Tôi biết bài này đã cũ, nhưng cũng nói. Giúp tôi với!
Ryan Rebo

3
Có một sự khác biệt giữa việc sử dụng "người trợ giúp" và "bao gồm" ngoài một số đường cú pháp đơn giản. "người trợ giúp" làm cho mô-đun có tên có sẵn cho các khung nhìn và chỉ các khung nhìn. "bao gồm" làm cho mô-đun được đặt tên có sẵn cho các khung nhìn và cho các bộ điều khiển. Cả hai tác động kế thừa bộ điều khiển và quan điểm của họ.
Richard_G

@R_G Bạn có để ý rằng, đoạn cuối cùng include UserHelpernằm trong HomeHelpermô-đun, thay vì trong bộ điều khiển không? AFAIK, chỉ đơn giản bao gồm mô-đun trợ giúp trong bộ điều khiển sẽ không chia sẻ các phương thức với các khung nhìn.
Franklin Yu

@FranklinYu bao gồm mô đun trình trợ giúp trong bộ điều khiển sẽ thực sự chia sẻ các phương thức với các khung nhìn, vì vậy R_G là chính xác.
Magne
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.