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

Ruby on Rails 7.1:Nắm vững các biến cục bộ nghiêm ngặt theo từng phần

Các phần của Rails đã tồn tại trong nhiều năm nhưng chúng có thể phức tạp vì chúng chỉ là các đoạn mã ERB không có cấu trúc đối tượng hỗ trợ.

Gần đây, các thư viện như ViewComponent và Phlex đã cố gắng cải thiện lớp xem bằng cách thêm nhiều cấu trúc ngữ nghĩa hơn vào các mẫu. Đây là những thư viện tuyệt vời và cá nhân tôi tìm đến ViewComponent trên hầu hết mọi dự án tôi thực hiện. Điều đó nói lên rằng, tôi vẫn cảm thấy phần Rails khiêm tốn vẫn hoạt động tốt trong nhiều trường hợp sử dụng.

Nhóm Rails luôn cố gắng cải thiện sản phẩm của mình, vì vậy hãy xem một tính năng mới được giới thiệu trong Rails 7.1:người dân địa phương nghiêm ngặt!

Các phần của Rails và các biến cục bộ

Chúng ta có thể chuyển các biến cục bộ tùy ý vào các phần của Rails và chúng có sẵn để sử dụng một cách kỳ diệu.

 

Điều này không lý tưởng vì rất khó để xác định biến nào được chấp nhận nếu có một khối đánh dấu lớn. Ngoài ra, vì các biến được tạo động nên biến bị thiếu sẽ không trả về nil nhưng sẽ gây ra lỗi.

Giả sử icon là tùy chọn ở phần trên:

 

Chúng tôi kết xuất nó dưới dạng:

 

Điều đó sẽ tăng ActionView::Template::Error , kèm theo tin nhắn undefined local variable or method 'icon' for #<ActionView::Base:0x00000000023078> .

Thực tế là icon là tùy chọn cũng không rõ ràng đối với người đọc. Cho đến Rails 7.1, giải pháp là kiểm tra local_assigns hàm băm chứa tất cả các biến cục bộ được chèn vào.

 

Điều này khắc phục lỗi trên vì icon biến bây giờ luôn được đặt.

Rails 7.1 cố gắng giải quyết những thiếu sót của các biến cục bộ một phần bằng khái niệm cục bộ nghiêm ngặt .

Người dân địa phương nghiêm ngặt trong Rails là gì?

Bắt đầu từ Rails 7.1, chúng ta có thể viết một nhận xét kỳ diệu ở đầu các phần, xác định các biến cục bộ mà nó chấp nhận và mọi giá trị mặc định cho chúng.

 

Rails phân tích nhận xét này và đặt các biến được xác định trong một phần. Bây giờ người đọc đã thấy rõ các biến nào được chấp nhận và bất kỳ giá trị mặc định nào.

Một phần vẫn sẽ hiển thị như được hiển thị ở trên. Hãy thử loại trừ title biến từ trang cuộc gọi và xem điều gì sẽ xảy ra:

 

Bạn nhận được ArgumentError với tin nhắn missing local: :title :một thông báo lỗi mang tính mô tả hơn trước!

Khi nào nên sử dụng địa phương nghiêm ngặt

Địa phương nghiêm ngặt có thể khó sử dụng nên không phải lúc nào cũng nên sử dụng chúng, đặc biệt là trong các ứng dụng cũ.

Hãy xem một trường hợp sử dụng hoàn hảo cho người dân địa phương nghiêm ngặt. Giả sử chúng tôi có một phần hiển thị thông tin chi tiết của người dùng trong thẻ , nhưng chỉ quản trị viên mới có thể biết thời điểm họ đăng nhập lần cuối:

 

Phần này có một số biến và có một biến tùy chọn, làm cho nó trở thành một trường hợp hoàn hảo cho những người dân địa phương nghiêm ngặt. Việc thêm nhận xét kỳ diệu sau vào tệp giúp việc đọc lướt dễ dàng hơn đáng kể:

 

Trong trường hợp một phần được liên kết của mô hình (ví dụ:posts/_post.html.erb ), khá rõ ràng là một phần như vậy chấp nhận một post duy nhất biến. Tôi không nghĩ người dân địa phương nghiêm khắc nhất thiết phải là ý tưởng hay cho những trường hợp này.

Những vấn đề nghiêm khắc của người dân địa phương

Có một số vấn đề cần cảnh giác, đó là lý do tại sao tôi không khuyên bạn nên sử dụng các địa phương nghiêm ngặt trên diện rộng.

Ngầm hiển thị một bộ sưu tập

Khi ngầm hiển thị một bộ sưu tập:

 

Rails tiêm _post một phần với hai biến ngoài post biến. Trước Rails 7.1.2, những thứ này cần được xác định thủ công để tránh lỗi:

 

Sự cố này đã được khắc phục trong Rails 7.1.2 và các biến này hiện là tùy chọn (nhưng thật tốt khi biết chúng tồn tại nếu cần)!

Phát sóng qua ActionCable

Khi phát một phần qua ActionCable từ lệnh gọi lại ActiveRecord:

 

Bạn cần chỉ định request_id biến cục bộ mặc định là nil , vì điều này được Rails sử dụng một cách sâu sắc.

 

Không làm như vậy sẽ gây ra lỗi khi lệnh gọi lại được kích hoạt.

Và thế là chuyến tham quan hấp dẫn của chúng ta đã hoàn thành!

Một số điều cần lưu ý

Việc thêm các cục bộ nghiêm ngặt vào các phần hiện có là tất cả hoặc không có gì đề xuất cho một tập tin nhất định. Chúng tôi không thể thêm dần dần các biến vào nhận xét ma thuật khi chúng tôi tìm thấy chúng. Như đã trình bày trong các vấn đề ở trên, có thể khó xác định tất cả các biến cần được khai báo trong nhận xét ma thuật.

Do việc lập luận về mã với người dân địa phương nghiêm ngặt dễ dàng hơn nhiều nên tôi nghĩ chúng đáng được sử dụng rộng rãi trong các ứng dụng mới (và dần dần bổ sung thêm vào các ứng dụng cũ).

Điều quan trọng là đảm bảo bộ thử nghiệm của bạn trong các ứng dụng cũ bao gồm các phần mà bạn thêm cục bộ nghiêm ngặt vào. Việc thiếu sót sẽ gây ra ngoại lệ, vì vậy bạn cần chắc chắn rằng mình đã kiểm tra tất cả các trường hợp sử dụng trước khi triển khai các thay đổi.

Mặc dù tôi không phải là người hâm mộ cuồng nhiệt của bình luận ma thuật (vì tôi tin rằng các bình luận không bao giờ nên có chức năng), tôi nghĩ những người dân địa phương nghiêm ngặt là một bổ sung tuyệt vời cho Rails. Việc chỉ định người dân địa phương vào một phần luôn là điều khó khăn và điều này làm cho việc này trở nên dễ dàng hơn. Chỉ cần cẩn thận với những lỗi này!

Kết thúc

Trong bài đăng này, chúng tôi đã xem nhanh các nội dung nghiêm ngặt trong Rails 7.1. Chúng tôi đã biết cách hoạt động của các biến cục bộ và các biến cục bộ trước khi khám phá thời điểm nên sử dụng các biến cục bộ nghiêm ngặt và một số vấn đề cần lưu ý.

Chúc bạn viết mã vui vẻ!

Tái bút. Nếu bạn muốn đọc các bài đăng của Ruby Magic ngay khi chúng được đăng tải, hãy đăng ký nhận bản tin Ruby Magic của chúng tôi và không bao giờ bỏ lỡ một bài đăng nào!

Ruby on Rails 7.1:Nắm vững các biến cục bộ nghiêm ngặt theo từng phần

Ayush Newatia

Tác giả khách mời Ayush là nhà phát triển Ruby và Rails tự do. Anh ấy là tác giả của The Rails và Hotwire Codex và là thành viên của nhóm nòng cốt Bridgetown. Anh ấy cũng điều hành một ứng dụng danh sách gửi thư tập trung vào quyền riêng tư có tên là Scattergun.

Tất cả bài viết của Ayush Newatia