Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Thành Thạo Rails Helpers: Hướng Dẫn Hoàn Chỉnh Về Phương Thức View Tái Sử Dụng

Helper trong Rails là gì?

Một helper là phương thức (chủ yếu) dùng trong view Rails của bạn để chia sẻ code tái sử dụng. Rails đi kèm một tập hợp phương thức helper tích hợp sẵn.

Một trong các helper tích hợp này là time_ago_in_words.

Ví dụ:

time_ago_in_words(Time.now) # "less than a minute"
time_ago_in_words(Time.now + 60) # "1 minute"
time_ago_in_words(Time.now + 600) # "10 minutes"

Phương thức này hữu ích bất cứ khi nào bạn muốn hiển thị thời gian theo định dạng cụ thể này.

Helper view Rails khác là number_to_human.

Ví dụ:

number_to_human(10_000) # "10 Thousand"

Điều này tuyệt vời khi bạn muốn lấy một số & in nó như bạn đọc, làm cho nó cảm thấy tự nhiên hơn.

Bạn có thể tìm thêm helper trong tài liệu Ruby on Rails.

Nhưng bạn có biết bạn có thể viết helper của riêng mình?

Viết Phương Thức Helper Của Riêng Bạn

Nếu bạn muốn viết phương thức helper tùy chỉnh, đường dẫn thư mục đúng là app/helpers.

Bạn viết helper bên trong một module helper.

Mọi ứng dụng Rails đi kèm module helper cơ sở theo mặc định, nó gọi là ApplicationHelper.

Đây là nơi bạn có thể thêm phương thức helper của mình.

Các phương thức này tự động có sẵn cho tất cả view của bạn. Sau bạn sẽ học cách dùng chúng trong controller & tại sao đó có thể là ý tưởng tồi.

Bạn có thể viết tất cả helper trong ApplicationHelper.

Nhưng có tùy chọn khác…

Bạn có thể tạo module helper để tổ chức tốt hơn các phương thức của mình.

Hướng dẫn:

  • Tạo tệp mới dưới app/helpers
  • Đặt tên như user_helper.rb
  • Thêm module mới khớp với tên tệp

Ví dụ:

# app/helpers/user_helper.rb
module UserHelper
def format_name(user)
if user.gender == "M"
"Mr. #{user.name}"
else
"Ms. #{user.name}"
end
end
end

Code này có thể dùng để xưng hô một người theo cách trang trọng dựa trên giới tính.

Lợi ích chính?

Bạn không phải lặp lại logic này trong view khác khi cần & khi cần thay đổi code… nó chỉ phải thay đổi ở một nơi.

Rất hay!

Sử Dụng Module Helper Mới Của Bạn

Bạn có thể dùng phương thức helper của mình trong view.

Như sau:

<%= format_name(@user) %>

Dễ dàng, phải không?

Nếu bạn muốn dùng helper bên ngoài view, bạn sẽ cần thứ khác.

Cách Dùng Helper Từ Controller

Điều này có thể, dù không phổ biến, dùng phương thức helper từ action controller.

Trước Rails 5, bạn phải include module helper.

Trong phiên bản mới hơn, bạn có thể dùng helper trong controller với đối tượng helpers (số nhiều).

Như sau:

class UsersController
def index
helpers.time_ago_in_words(Time.now)
end
end

Cách này cho phép bạn dùng helper từ controller. Nhưng hãy suy nghĩ kỹ trước khi làm vì có thể là vấn đề thiết kế.

Xem xét dùng đối tượng Ruby thuần túy thay vào đó.

Vui Vẻ Với Rails Console

Tôi thích dùng Rails console (irb với ứng dụng Rails đã tải) để thử phương thức & chơi với mọi thứ.

Helper cũng bao gồm!

Bạn có thể dùng helper từ console với helper.method_name.

Chú ý dạng số ít của „helper“ để không nhận thông báo lỗi. Và nhớ console không tự động tải lại thay đổi code.

Thực Hành Tốt Nhất Viết Rails View Helper

Khi nào nên tạo phương thức helper?

Bất cứ khi nào bạn có logic tạo ra các mẩu HTML.

Thông thường, điều này rơi vào một trong hai loại, một là định dạng chuỗi & cái khác là yếu tố trang có điều kiện.

Mẹo khác…

Nếu bạn muốn viết helper tốt, đừng dùng bất kỳ biến instance nào, chúng có thể có sẵn trong view hiện tại, nhưng có thể không có trong view khác.

Điều đó sẽ dẫn đến lỗi do thiếu biến.

Giải pháp?

Dùng tham số, để bất kỳ dữ liệu nào phương thức cần là rõ ràng & tường minh.

# sai
def eat_healthy
@fruit.eat
end
# đúng
def eat_healthy(fruit)
fruit.eat
end

Mẹo cuối của tôi là chia helper thành module, nơi mỗi tên module mô tả rõ ràng loại phương thức nó chứa.

Tuy nhiên:

Điều này không giúp với trùng tên phương thức, có thể gây lỗi & nhầm lẫn.

Tất cả helper của bạn nên có tên duy nhất.

Là lựa chọn thay thế, thử dùng đối tượng presenter, như giải thích trong hướng dẫn này.

Tóm Tắt

Bạn đã học về helper trong Rails! Một tập phương thức tiện ích bạn có thể dùng cho định dạng & xử lý logic phức tạp trong view.

Bây giờ là lúc tạo helper của riêng bạn.

Cảm ơn bạn đã đọc 🙂