Javascript chuyển hướng trang hiện tại
Hướng dẫn này tập trung vào sự tương tác giữa Controller và View trong tam giác Model-View-Controller. Như bạn đã biết, Bộ điều khiển chịu trách nhiệm điều phối toàn bộ quá trình xử lý yêu cầu trong Rails, mặc dù nó thường chuyển bất kỳ mã nặng nào cho Mô hình. Nhưng sau đó, khi đến lúc gửi phản hồi lại cho người dùng, Bộ điều khiển sẽ chuyển giao mọi thứ cho Chế độ xem. Đó là bàn giao đó là chủ đề của hướng dẫn này Nói một cách khái quát, điều này liên quan đến việc quyết định cái gì sẽ được gửi dưới dạng phản hồi và gọi một phương thức thích hợp để tạo phản hồi đó. Nếu phản hồi là một chế độ xem toàn diện, Rails cũng thực hiện thêm một số công việc để bao bọc chế độ xem trong một bố cục và có thể kéo vào một phần chế độ xem. Bạn sẽ thấy tất cả những con đường đó sau trong hướng dẫn này Từ quan điểm của bộ điều khiển, có ba cách để tạo phản hồi HTTP
Bạn đã nghe nói rằng Rails khuyến khích "quy ước về cấu hình". Kết xuất mặc định là một ví dụ tuyệt vời về điều này. Theo mặc định, các bộ điều khiển trong Rails sẽ tự động hiển thị các chế độ xem có tên tương ứng với các tuyến hợp lệ. Ví dụ: nếu bạn có mã này trong lớp 03 của mình Bản saoVà sau đây trong tập tin tuyến đường của bạn Và bạn có một tập tin xem 04 Bản saoRails sẽ tự động hiển thị 04 khi bạn điều hướng đến 06 và bạn sẽ thấy "Sách sắp ra mắt. " trên màn hình của bạnTuy nhiên, màn hình sắp ra mắt chỉ hữu ích ở mức tối thiểu, vì vậy bạn sẽ sớm tạo mô hình 07 của mình và thêm hành động chỉ mục vào 03 Bản saoLưu ý rằng chúng tôi không hiển thị rõ ràng ở cuối hành động chỉ mục theo nguyên tắc "quy ước về cấu hình". Quy tắc là nếu bạn không hiển thị rõ ràng thứ gì đó ở cuối hành động của bộ điều khiển, Rails sẽ tự động tìm mẫu 09 trong đường dẫn chế độ xem của bộ điều khiển và hiển thị nó. Vì vậy, trong trường hợp này, Rails sẽ kết xuất tệp 04Nếu chúng tôi muốn hiển thị các thuộc tính của tất cả sách trong chế độ xem của mình, chúng tôi có thể làm như vậy với mẫu ERB như thế này 1Bản saoKết xuất thực tế được thực hiện bởi các lớp lồng nhau của mô-đun 11. Hướng dẫn này không đi sâu vào quy trình đó, nhưng điều quan trọng cần biết là phần mở rộng tệp trên chế độ xem của bạn kiểm soát việc lựa chọn trình xử lý mẫuTrong hầu hết các trường hợp, phương pháp này thực hiện rất nhiều việc hiển thị nội dung ứng dụng của bạn để trình duyệt sử dụng. Có nhiều cách khác nhau để tùy chỉnh hành vi của 00. Bạn có thể hiển thị chế độ xem mặc định cho mẫu Rails hoặc mẫu cụ thể hoặc tệp hoặc mã nội tuyến hoặc không có gì cả. Bạn có thể hiển thị văn bản, JSON hoặc XML. Bạn cũng có thể chỉ định loại nội dung hoặc trạng thái HTTP của phản hồi được hiển thịNếu bạn muốn xem kết quả chính xác của lệnh gọi tới 00 mà không cần kiểm tra nó trong trình duyệt, bạn có thể gọi tới 16. Phương thức này có các tùy chọn chính xác giống như 00, nhưng nó trả về một chuỗi thay vì gửi phản hồi trở lại trình duyệtNếu bạn muốn hiển thị chế độ xem tương ứng với một mẫu khác trong cùng bộ điều khiển, bạn có thể sử dụng 00 với tên của chế độ xem 8Bản saoNếu cuộc gọi đến 19 không thành công, việc gọi hành động 19 trong bộ điều khiển này sẽ hiển thị mẫu 21 thuộc cùng một bộ điều khiểnNếu muốn, bạn có thể sử dụng ký hiệu thay vì chuỗi để chỉ định hành động sẽ hiển thị 2Bản saoĐiều gì sẽ xảy ra nếu bạn muốn hiển thị mẫu từ bộ điều khiển hoàn toàn khác với mẫu chứa mã hành động? . Ví dụ: nếu bạn đang chạy mã trong một 24 sống trong 25, bạn có thể hiển thị kết quả của một hành động cho một mẫu trong 26 theo cách này 8Bản saoRails biết rằng chế độ xem này thuộc về một bộ điều khiển khác do ký tự gạch chéo được nhúng trong chuỗi. Nếu muốn rõ ràng, bạn có thể sử dụng tùy chọn 27 (được yêu cầu trên Rails 2. 2 trở về trước) 0Bản saoHai cách kết xuất ở trên (hiển thị mẫu của một hành động khác trong cùng một bộ điều khiển và hiển thị mẫu của một hành động khác trong một bộ điều khiển khác) thực sự là các biến thể của cùng một thao tác Trên thực tế, trong lớp 03, bên trong hành động cập nhật nơi chúng tôi muốn hiển thị mẫu chỉnh sửa nếu sách không cập nhật thành công, tất cả các lệnh gọi kết xuất sau đây đều sẽ hiển thị mẫu 21 trong thư mục 30 4Bản saoCái nào bạn sử dụng thực sự là một vấn đề về phong cách và quy ước, nhưng quy tắc ngón tay cái là sử dụng cái đơn giản nhất có ý nghĩa đối với mã bạn đang viết Phương thức 00 có thể thực hiện hoàn toàn mà không cần chế độ xem, nếu bạn sẵn sàng sử dụng tùy chọn 32 để cung cấp ERB như một phần của lệnh gọi phương thức. Điều này là hoàn toàn hợp lệ 7Bản saoHiếm khi có bất kỳ lý do chính đáng nào để sử dụng tùy chọn này. Trộn ERB vào bộ điều khiển của bạn sẽ đánh bại định hướng MVC của Rails và sẽ khiến các nhà phát triển khác khó tuân theo logic của dự án của bạn hơn. Thay vào đó, hãy sử dụng chế độ xem erb riêng biệt Theo mặc định, hiển thị nội tuyến sử dụng ERB. Bạn có thể buộc nó sử dụng Builder thay thế bằng tùy chọn 35 0Bản saoBạn có thể gửi văn bản thuần túy - hoàn toàn không có đánh dấu - trở lại trình duyệt bằng cách sử dụng tùy chọn 36 đến 00Hiển thị văn bản thuần túy hữu ích nhất khi bạn đang phản hồi các yêu cầu dịch vụ web hoặc Ajax đang mong đợi một thứ gì đó không phải là HTML phù hợp Theo mặc định, nếu bạn sử dụng tùy chọn 36, văn bản sẽ được hiển thị mà không sử dụng bố cục hiện tại. Nếu bạn muốn Rails đưa văn bản vào bố cục hiện tại, bạn cần thêm tùy chọn 39 và sử dụng phần mở rộng 40 cho tệp bố cụcBạn có thể gửi một chuỗi HTML trở lại trình duyệt bằng cách sử dụng tùy chọn 41 để gửi tới 00 1Bản saoĐiều này hữu ích khi bạn đang hiển thị một đoạn mã HTML nhỏ. Tuy nhiên, bạn có thể cân nhắc chuyển nó sang tệp mẫu nếu đánh dấu phức tạp Khi sử dụng tùy chọn 43, các thực thể HTML sẽ được thoát nếu chuỗi không được tạo bằng API nhận biết 44JSON là một định dạng dữ liệu JavaScript được nhiều thư viện Ajax sử dụng. Rails có hỗ trợ tích hợp để chuyển đổi các đối tượng thành JSON và hiển thị JSON đó trở lại trình duyệt Bạn không cần gọi 45 trên đối tượng mà bạn muốn kết xuất. Nếu bạn sử dụng tùy chọn 46, 00 sẽ tự động gọi 45 cho bạnRails cũng có hỗ trợ tích hợp để chuyển đổi các đối tượng thành XML và hiển thị XML đó trở lại trình gọi Bạn không cần gọi 49 trên đối tượng mà bạn muốn kết xuất. Nếu bạn sử dụng tùy chọn 50, 00 sẽ tự động gọi 49 cho bạnRails có thể hiển thị vanilla JavaScript 2Bản saoĐiều này sẽ gửi chuỗi được cung cấp tới trình duyệt với loại MIME là 53Bạn có thể gửi nội dung thô trở lại trình duyệt mà không cần đặt bất kỳ loại nội dung nào bằng cách sử dụng tùy chọn 54 thành 00Tùy chọn này chỉ nên được sử dụng nếu bạn không quan tâm đến loại nội dung của phản hồi. Hầu hết thời gian sử dụng 36 hoặc 41 có thể phù hợp hơnTrừ khi bị ghi đè, phản hồi của bạn được trả về từ tùy chọn kết xuất này sẽ là 58, vì đó là loại nội dung mặc định của phản hồi Gửi hành độngRails có thể kết xuất một tệp thô từ một đường dẫn tuyệt đối. Điều này hữu ích để hiển thị có điều kiện các tệp tĩnh như các trang lỗi 3Bản saoĐiều này hiển thị tệp thô (nó không hỗ trợ ERB hoặc các trình xử lý khác). Theo mặc định, nó được hiển thị trong bố cục hiện tại Sử dụng tùy chọn 59 kết hợp với đầu vào của người dùng có thể dẫn đến các sự cố bảo mật vì kẻ tấn công có thể sử dụng hành động này để truy cập các tệp nhạy cảm về bảo mật trong hệ thống tệp của bạn 60 thường là tùy chọn nhanh hơn và tốt hơn nếu không yêu cầu bố cụcĐường ray có thể hiển thị các đối tượng phản hồi 61 4Bản saoĐiều này gọi 62 trên đối tượng được cung cấp với bối cảnh xem hiện tạiCác cuộc gọi đến phương thức thường chấp nhận sáu tùy chọn
65Theo mặc định, Rails sẽ cung cấp kết quả của thao tác kết xuất với loại nội dung MIME là 72 (hoặc 73 nếu bạn sử dụng tùy chọn 46 hoặc 75 cho tùy chọn 50. ). Đôi khi bạn có thể muốn thay đổi điều này và bạn có thể làm như vậy bằng cách đặt tùy chọn 65 5Bản sao2. 2. 13. 2 Tùy chọn 66Với hầu hết các tùy chọn cho 00, nội dung hiển thị được hiển thị như một phần của bố cục hiện tại. Bạn sẽ tìm hiểu thêm về bố cục và cách sử dụng chúng sau trong hướng dẫn nàyBạn có thể sử dụng tùy chọn 66 để yêu cầu Rails sử dụng một tệp cụ thể làm bố cục cho hành động hiện tại 6Bản saoBạn cũng có thể yêu cầu Rails kết xuất mà không có bố cục nào cả Bạn có thể sử dụng tùy chọn 67 để đặt tiêu đề HTTP 82 7Bản sao2. 2. 13. 4 Tùy chọn 68Rails sẽ tự động tạo phản hồi với mã trạng thái HTTP chính xác (trong hầu hết các trường hợp, đây là 84). Bạn có thể sử dụng tùy chọn 68 để thay đổi điều này 8Bản saoRails hiểu cả mã trạng thái số và các ký hiệu tương ứng được hiển thị bên dưới Lớp phản hồi Mã trạng thái HTTP Biểu tượngThông tin100. tiếp tục101. switching_protocols102. xử lýSuccess200. được201. đã tạo202. chấp nhận203. non_authoritative_information204. no_content205. đặt lại_content206. một phần_content207. multi_status208. đã_reported226. im_usedRedirection300. nhiều_choices301. đã di chuyển_vĩnh viễn 302. tìm thấy303. xem_other304. not_modified305. sử dụng_proxy307. chuyển hướng tạm thời 308. chuyển hướng vĩnh viễn Lỗi máy khách 400. bad_request401. trái phép402. thanh toán_required403. bị cấm404. not_found405. method_not_allowed 406. not_acceptable407. proxy_authentication_required408. request_timeout409. xung đột410. đi411. chiều dài_required412. điều kiện tiên quyết_failed413. payload_too_large 414. uri_too_long415. unsupported_media_type416. range_not_satisfiable417. kỳ vọng_failed421. yêu cầu sai hướng 422. thực thể không xử lý được 423. khóa424. fail_dependency426. nâng cấp_required428. điều kiện tiên quyết_required429. too_many_requests 431. request_header_fields_too_large451. không khả dụng vì lý do pháp lý Lỗi máy chủ 500. internal_server_error 501. not_implemented502. bad_gateway503. dịch vụ_không khả dụng 504. gateway_timeout505. http_version_not_supported506. biến thể_cũng_negotiates507. không đủ_storage508. loop_detected510. not_extend511. network_authentication_requiredNếu bạn cố hiển thị nội dung cùng với mã trạng thái không phải nội dung (100-199, 204, 205 hoặc 304), nội dung đó sẽ bị loại khỏi phản hồi 2. 2. 13. 5 Tùy chọn 69Rails sử dụng định dạng được chỉ định trong yêu cầu (hoặc 41 theo mặc định). Bạn có thể thay đổi điều này thông qua tùy chọn 69 bằng một ký hiệu hoặc một mảng 9Bản saoNếu một mẫu có định dạng được chỉ định không tồn tại, lỗi 89 sẽ xuất hiện2. 2. 13. 6 Tùy chọn 70Điều này yêu cầu Rails tìm kiếm các biến thể mẫu có cùng định dạng. Bạn có thể chỉ định danh sách các biến thể bằng cách chuyển tùy chọn 70 bằng một ký hiệu hoặc một mảngMột ví dụ về việc sử dụng sẽ là thế này 0Bản saoVới tập hợp các biến thể này, Rails sẽ tìm kiếm tập hợp các mẫu sau và sử dụng mẫu đầu tiên tồn tại
Nếu một mẫu có định dạng được chỉ định không tồn tại, lỗi 89 sẽ xuất hiệnThay vì đặt biến thể trên lệnh gọi kết xuất, bạn cũng có thể đặt nó trên đối tượng yêu cầu trong hành động điều khiển của mình 1Bản saoĐể tìm bố cục hiện tại, trước tiên Rails tìm một tệp trong 96 có cùng tên cơ sở với bộ điều khiển. Ví dụ: các hành động hiển thị từ lớp 97 sẽ sử dụng 98 (hoặc 99). Nếu không có bố cục dành riêng cho bộ điều khiển như vậy, Rails sẽ sử dụng 00 hoặc 01. Nếu không có bố cục 02, Rails sẽ sử dụng bố cục 03 nếu có. Rails cũng cung cấp một số cách để gán chính xác hơn các bố cục cụ thể cho các bộ điều khiển và hành động riêng lẻ2. 2. 14. 1 Chỉ định Bố cục cho Bộ điều khiểnBạn có thể ghi đè các quy ước bố cục mặc định trong bộ điều khiển của mình bằng cách sử dụng khai báo. Ví dụ 2Bản saoVới tuyên bố này, tất cả các chế độ xem được hiển thị bởi 05 sẽ sử dụng 06 làm bố cục của chúngĐể chỉ định bố cục cụ thể cho toàn bộ ứng dụng, hãy sử dụng khai báo 04 trong lớp 08 của bạn 3Bản saoVới tuyên bố này, tất cả các chế độ xem trong toàn bộ ứng dụng sẽ sử dụng 09 cho bố cục của chúngBạn có thể sử dụng một biểu tượng để trì hoãn lựa chọn bố cục cho đến khi yêu cầu được xử lý 4Bản saoBây giờ, nếu người dùng hiện tại là người dùng đặc biệt, họ sẽ có bố cục đặc biệt khi xem sản phẩm Bạn thậm chí có thể sử dụng một phương pháp nội tuyến, chẳng hạn như Proc, để xác định bố cục. Ví dụ: nếu bạn chuyển một đối tượng Proc, khối bạn cung cấp cho Proc sẽ được cung cấp phiên bản 10, vì vậy bố cục có thể được xác định dựa trên yêu cầu hiện tại 5Bản sao2. 2. 14. 3 bố cục có điều kiệnBố cục được chỉ định ở cấp bộ điều khiển hỗ trợ các tùy chọn 11 và 12. Các tùy chọn này lấy tên phương thức hoặc một mảng tên phương thức, tương ứng với tên phương thức trong bộ điều khiển 6Bản saoVới khai báo này, bố cục 13 sẽ được sử dụng cho mọi thứ trừ các phương thức 14 và 152. 2. 14. 4 Kế thừa bố cụcCác khai báo bố cục xếp tầng xuống trong cấu trúc phân cấp và các khai báo bố cục cụ thể hơn luôn ghi đè lên các khai báo chung hơn. Ví dụ
trong ứng dụng này
Tương tự như logic Kế thừa bố cục, nếu không tìm thấy mẫu hoặc một phần trong đường dẫn thông thường, bộ điều khiển sẽ tìm một mẫu hoặc một phần để hiển thị trong chuỗi thừa kế của nó. Ví dụ 11Bản sao 12Bản sao 13Bản saoThứ tự tra cứu cho một hành động 28 sẽ là
Điều này làm cho 31 trở thành một nơi tuyệt vời cho các phần được chia sẻ của bạn, sau đó có thể được hiển thị trong ERB của bạn như vậy 14Bản saoKhông sớm thì muộn, hầu hết các nhà phát triển Rails sẽ thấy thông báo lỗi "Chỉ có thể kết xuất hoặc chuyển hướng một lần cho mỗi hành động". Mặc dù điều này gây khó chịu, nhưng nó tương đối dễ khắc phục. Thông thường nó xảy ra do hiểu lầm cơ bản về cách thức hoạt động của 00Ví dụ: đây là một số mã sẽ gây ra lỗi này 15Bản saoNếu 34 đánh giá thành 35, Rails sẽ bắt đầu quá trình kết xuất để kết xuất biến 36 vào chế độ xem 37. Nhưng điều này sẽ không ngăn phần còn lại của mã trong hành động 38 chạy và khi Rails kết thúc hành động, nó sẽ bắt đầu hiển thị chế độ xem 39 - và gây ra lỗi. Giải pháp rất đơn giản. đảm bảo rằng bạn chỉ có một cuộc gọi đến 00 hoặc 41 trong một đường dẫn mã duy nhất. Một điều có thể giúp ích là 42. Đây là một phiên bản vá của phương pháp 16Bản saoĐảm bảo sử dụng 42 thay vì 44 vì 44 sẽ không hoạt động do ưu tiên của toán tử trong Ngôn ngữ RubyLưu ý rằng kết xuất ẩn được thực hiện bởi ActionController sẽ phát hiện nếu 00 đã được gọi, vì vậy phần sau sẽ hoạt động mà không có lỗi 17Bản saoThao tác này sẽ hiển thị sách có 47 được đặt theo mẫu 37, trong khi các sách khác sẽ hiển thị theo mẫu 38 mặc địnhMột cách khác để xử lý các phản hồi trả về cho một yêu cầu HTTP là sử dụng. Như bạn đã thấy, 00 cho Rails biết nên sử dụng chế độ xem nào (hoặc nội dung khác) để xây dựng phản hồi. Phương thức 01 thực hiện điều gì đó hoàn toàn khác. nó yêu cầu trình duyệt gửi một yêu cầu mới cho một URL khác. Ví dụ: bạn có thể chuyển hướng từ bất kỳ vị trí nào trong mã của mình đến chỉ mục ảnh trong ứng dụng của mình bằng lệnh gọi này 18Bản saoBạn có thể sử dụng để đưa người dùng trở lại trang mà họ vừa truy cập. Vị trí này được lấy từ tiêu đề 55 không đảm bảo được đặt bởi trình duyệt, vì vậy bạn phải cung cấp 56 để sử dụng trong trường hợp này 19Bản sao 01 và 54 không tạm dừng và quay lại ngay lập tức từ quá trình thực thi phương thức mà chỉ cần đặt các phản hồi HTTP. Các câu lệnh xảy ra sau chúng trong một phương thức sẽ được thực thi. Bạn có thể tạm dừng bằng một 59 rõ ràng hoặc một số cơ chế tạm dừng khác, nếu cầnRails sử dụng mã trạng thái HTTP 302, một chuyển hướng tạm thời, khi bạn gọi 01. Nếu bạn muốn sử dụng mã trạng thái khác, có thể là 301, chuyển hướng vĩnh viễn, bạn có thể sử dụng tùy chọn 68 80Bản saoGiống như tùy chọn 68 cho 00, 68 cho 01 chấp nhận cả ký hiệu tiêu đề số và ký hiệuĐôi khi các nhà phát triển thiếu kinh nghiệm nghĩ về 01 như một loại lệnh 69, chuyển việc thực thi từ nơi này sang nơi khác trong mã Rails của bạn. Điều này LAF không đúng. Mã của bạn ngừng chạy và chờ yêu cầu mới từ trình duyệt. Điều đó xảy ra là bạn đã cho trình duyệt biết yêu cầu nào sẽ thực hiện tiếp theo, bằng cách gửi lại mã trạng thái HTTP 302Hãy xem xét những hành động này để thấy sự khác biệt 81Bản saoVới code ở dạng này, rất có thể sẽ xảy ra vấn đề nếu biến 36 là 71. Hãy nhớ rằng, một 72 không chạy bất kỳ mã nào trong hành động đích, vì vậy sẽ không có gì thiết lập biến 73 mà chế độ xem 15 có thể sẽ yêu cầu. Một cách để khắc phục điều này là chuyển hướng thay vì hiển thị 82Bản saoVới mã này, trình duyệt sẽ tạo một yêu cầu mới cho trang chỉ mục, mã trong phương thức 15 sẽ chạy và tất cả sẽ ổnNhược điểm duy nhất của mã này là nó yêu cầu một chuyến đi khứ hồi tới trình duyệt. trình duyệt đã yêu cầu hiển thị hành động với 76 và bộ điều khiển nhận thấy rằng không có sách nào, vì vậy bộ điều khiển gửi phản hồi chuyển hướng 302 tới trình duyệt yêu cầu nó chuyển đến 77, trình duyệt tuân thủ và gửi yêu cầu mới trở lại bộ điều khiển yêu cầu Mặc dù trong một ứng dụng nhỏ, độ trễ được thêm vào này có thể không phải là vấn đề, nhưng đây là điều cần suy nghĩ nếu thời gian phản hồi là vấn đề đáng lo ngại. Chúng ta có thể chứng minh một cách để xử lý vấn đề này bằng một ví dụ giả định 83Bản saoĐiều này sẽ phát hiện ra rằng không có sách nào có ID được chỉ định, điền vào biến đối tượng 73 với tất cả các sách trong mô hình, sau đó hiển thị trực tiếp mẫu 80, trả lại mẫu đó cho trình duyệt bằng một thông báo cảnh báo flash để cho người dùng biết điều gì đã xảy raPhương pháp này có thể được sử dụng để gửi phản hồi chỉ với các tiêu đề tới trình duyệt. Phương thức 02 chấp nhận một số hoặc ký hiệu (xem ) đại diện cho mã trạng thái HTTP. Đối số tùy chọn được hiểu là hàm băm của tên và giá trị tiêu đề. Ví dụ: bạn chỉ có thể trả về một tiêu đề lỗiĐiều này sẽ tạo ra tiêu đề sau 84Bản saoHoặc bạn có thể sử dụng các tiêu đề HTTP khác để truyền tải thông tin khác 85Bản saoMà sẽ sản xuất 86Bản saoKhi Rails hiển thị một chế độ xem dưới dạng phản hồi, nó sẽ làm như vậy bằng cách kết hợp chế độ xem với bố cục hiện tại, sử dụng các quy tắc để tìm bố cục hiện tại đã được đề cập trước đó trong hướng dẫn này. Trong một bố cục, bạn có quyền truy cập vào ba công cụ để kết hợp các bit đầu ra khác nhau để tạo thành phản hồi tổng thể Trình trợ giúp thẻ nội dung cung cấp các phương thức tạo HTML liên kết lượt xem với nguồn cấp dữ liệu, JavaScript, biểu định kiểu, hình ảnh, video và âm thanh. Có sáu trình trợ giúp thẻ nội dung có sẵn trong Rails Bạn có thể sử dụng các thẻ này trong bố cục hoặc các chế độ xem khác, mặc dù 83, 84 và 85, được sử dụng phổ biến nhất trong phần của bố cụcTrình trợ giúp thẻ nội dung không xác minh sự tồn tại của nội dung tại các vị trí đã chỉ định; Trình trợ giúp xây dựng HTML mà hầu hết các trình duyệt và trình đọc nguồn cấp dữ liệu có thể sử dụng để phát hiện sự hiện diện của nguồn cấp dữ liệu RSS, Atom hoặc JSON. Nó lấy loại liên kết ( 88, 89 hoặc 46), một hàm băm của các tùy chọn được chuyển qua url_for và một hàm băm của các tùy chọn cho thẻ 87Bản saoCó ba tùy chọn thẻ có sẵn cho 83
Trình trợ giúp trả về thẻ HTML 99 cho mỗi nguồn được cung cấpNếu bạn đang sử dụng Rails với Asset Pipeline được bật, trình trợ giúp này sẽ tạo liên kết đến 100 thay vì 101 được sử dụng trong các phiên bản trước của Rails. Liên kết này sau đó được cung cấp bởi đường ống nội dungTệp JavaScript trong ứng dụng Rails hoặc công cụ Rails đi vào một trong ba vị trí. 102, 103 hoặc 104. Những vị trí này được giải thích chi tiết trongBạn có thể chỉ định một đường dẫn đầy đủ liên quan đến gốc tài liệu hoặc một URL nếu bạn thích. Ví dụ: để liên kết đến tệp JavaScript bên trong thư mục có tên là 105 bên trong một trong số 102, 103 hoặc 104, bạn sẽ làm điều này 88Bản saoSau đó, Rails sẽ xuất một thẻ 99 như thế này 89Bản saoYêu cầu đối với nội dung này sau đó được phục vụ bởi đá quý Sprockets Để bao gồm nhiều tệp như 110 và 111 cùng một lúc 20Bản saoBao gồm 110 và 113 21Bản saoĐể bao gồm 114 22Bản saoTrình trợ giúp trả về thẻ HTML 117 cho mỗi nguồn được cung cấpNếu bạn đang sử dụng Rails với "Asset Pipeline" được bật, trình trợ giúp này sẽ tạo liên kết đến 118. Liên kết này sau đó được xử lý bởi đá quý Sprockets. Tệp biểu định kiểu có thể được lưu trữ ở một trong ba vị trí. 102, 103 hoặc 104Bạn có thể chỉ định một đường dẫn đầy đủ liên quan đến gốc tài liệu hoặc một URL. Ví dụ: để liên kết đến tệp biểu định kiểu bên trong thư mục có tên là 122 bên trong một trong số 102, 103 hoặc 104, bạn sẽ làm điều này 23Bản saoĐể bao gồm 126 và 127 24Bản saoĐể bao gồm 126 và 129 25Bản saoĐể bao gồm 130 26Bản saoTheo mặc định, 85 tạo liên kết với 132. Bạn có thể ghi đè mặc định này bằng cách chỉ định một tùy chọn thích hợp ( 92) 27Bản saoTrình trợ giúp tạo thẻ HTML 136 cho tệp đã chỉ định. Theo mặc định, các tệp được tải từ 137Lưu ý rằng bạn phải chỉ định phần mở rộng của hình ảnh 28Bản saoBạn có thể cung cấp một đường dẫn đến hình ảnh nếu bạn muốn 29Bản saoBạn có thể cung cấp hàm băm của các tùy chọn HTML bổ sung 80Bản saoBạn có thể cung cấp văn bản thay thế cho hình ảnh sẽ được sử dụng nếu người dùng tắt hình ảnh trong trình duyệt của họ. Nếu bạn không chỉ định rõ ràng văn bản thay thế, nó sẽ mặc định là tên tệp của tệp, được viết hoa và không có phần mở rộng. Ví dụ: hai thẻ hình ảnh này sẽ trả về cùng một mã 81Bản saoBạn cũng có thể chỉ định thẻ kích thước đặc biệt, ở định dạng "{width}x{height}" 82Bản saoNgoài các thẻ đặc biệt ở trên, bạn có thể cung cấp hàm băm cuối cùng của các tùy chọn HTML tiêu chuẩn, chẳng hạn như 138, 139 hoặc 140 83Bản saoTrình trợ giúp tạo thẻ HTML5 117 cho tệp đã chỉ định. Theo mặc định, các tệp được tải từ 144 84Bản saosản xuất 89Bản saoGiống như một 134, bạn có thể cung cấp một đường dẫn, tuyệt đối hoặc tương đối với thư mục 144. Ngoài ra, bạn có thể chỉ định tùy chọn 147 giống như tùy chọn 134. Thẻ video cũng có thể có bất kỳ tùy chọn HTML nào được chỉ định ở cuối ( 149, 150 et al)Thẻ video cũng hỗ trợ tất cả các tùy chọn HTML của 117 thông qua hàm băm tùy chọn HTML, bao gồm
Bạn cũng có thể chỉ định nhiều video để phát bằng cách chuyển một mảng video tới 141 86Bản saoĐiều này sẽ sản xuất 87Bản saoTrình trợ giúp tạo thẻ HTML5 117 cho tệp đã chỉ định. Theo mặc định, các tệp được tải từ 161 88Bản saoBạn có thể cung cấp đường dẫn đến tệp âm thanh nếu muốn 89Bản saoBạn cũng có thể cung cấp hàm băm của các tùy chọn bổ sung, chẳng hạn như 139, 138, v.v.Giống như 141, 158 có các tùy chọn đặc biệt
Trong ngữ cảnh của một bố cục, 169 xác định một phần mà nội dung từ chế độ xem sẽ được chèn vào. Cách đơn giản nhất để sử dụng điều này là có một 169 duy nhất, trong đó toàn bộ nội dung của chế độ xem hiện đang được hiển thị được chèn vào 00Bản saoBạn cũng có thể tạo bố cục với nhiều vùng năng suất 01Bản saoPhần chính của chế độ xem sẽ luôn hiển thị thành 169 chưa được đặt tên. Để hiển thị nội dung thành một tên 169, bạn sử dụng phương thức 174Phương pháp này cho phép bạn chèn nội dung vào một khối có tên là 169 trong bố cục của bạn. Ví dụ: chế độ xem này sẽ hoạt động với bố cục mà bạn vừa xem 02Bản saoKết quả hiển thị trang này thành bố cục được cung cấp sẽ là HTML này 03Bản saoPhương pháp 174 rất hữu ích khi bố cục của bạn chứa các vùng riêng biệt như thanh bên và chân trang sẽ chèn các khối nội dung của riêng chúng. Nó cũng hữu ích để chèn các thẻ tải các tệp JavaScript hoặc CSS dành riêng cho trang vào tiêu đề của một bố cục chung khácCác mẫu một phần - thường được gọi là "partials" - là một công cụ khác để chia quá trình kết xuất thành các phần dễ quản lý hơn. Với một phần, bạn có thể di chuyển mã để hiển thị một phần phản hồi cụ thể vào tệp của chính nó Để hiển thị một phần dưới dạng một phần của chế độ xem, bạn sử dụng phương thức trong chế độ xem Điều này sẽ hiển thị một tệp có tên 180 tại thời điểm đó trong chế độ xem đang được hiển thị. Lưu ý ký tự gạch dưới hàng đầu. các phần được đặt tên với dấu gạch dưới ở đầu để phân biệt chúng với các chế độ xem thông thường, mặc dù chúng được tham chiếu mà không có dấu gạch dưới. Điều này đúng ngay cả khi bạn đang lấy một phần từ thư mục khác 04Bản saoMã đó sẽ lấy một phần từ 181Một cách để sử dụng các phần tử là coi chúng tương đương với các chương trình con. như một cách để di chuyển các chi tiết ra khỏi chế độ xem để bạn có thể nắm bắt những gì đang diễn ra dễ dàng hơn. Ví dụ: bạn có thể có một chế độ xem giống như thế này 05Bản saoỞ đây, các phần 182 và 183 có thể chứa nội dung được chia sẻ bởi nhiều trang trong ứng dụng của bạn. Bạn không cần phải xem chi tiết của những phần này khi bạn đang tập trung vào một trang cụ thểNhư đã thấy trong các phần trước của hướng dẫn này, 169 là một công cụ rất mạnh để dọn dẹp bố cục của bạn. Hãy nhớ rằng đó là Ruby thuần túy, vì vậy bạn có thể sử dụng nó ở hầu hết mọi nơi. Ví dụ: chúng ta có thể sử dụng nó để KHÔ các định nghĩa bố cục biểu mẫu cho một số tài nguyên tương tự
Đối với nội dung được chia sẻ giữa tất cả các trang trong ứng dụng của bạn, bạn có thể sử dụng các phần trực tiếp từ bố cục Một phần có thể sử dụng tệp bố cục của chính nó, giống như chế độ xem có thể sử dụng bố cục. Ví dụ: bạn có thể gọi một phần như thế này 09Bản saoĐiều này sẽ tìm kiếm một phần có tên là 188 và hiển thị nó bằng cách sử dụng bố cục 189. Lưu ý rằng các bố cục cho các phần tuân theo cách đặt tên có dấu gạch dưới ở đầu giống như các phần thông thường và được đặt trong cùng thư mục với phần mà chúng thuộc về (không phải trong thư mục 190 chính)Cũng lưu ý rằng cần chỉ định rõ ràng 191 khi chuyển các tùy chọn bổ sung, chẳng hạn như 66Bạn cũng có thể chuyển các biến cục bộ thành các phần, làm cho chúng trở nên mạnh mẽ và linh hoạt hơn. Ví dụ: bạn có thể sử dụng kỹ thuật này để giảm trùng lặp giữa các trang mới và trang chỉnh sửa, trong khi vẫn giữ một chút nội dung riêng biệt
Mặc dù cùng một phần sẽ được hiển thị trong cả hai chế độ xem, trình trợ giúp gửi của Chế độ xem hành động sẽ trả về "Tạo vùng" cho hành động mới và "Cập nhật vùng" cho hành động chỉnh sửa Để chuyển một biến cục bộ sang một phần chỉ trong các trường hợp cụ thể, hãy sử dụng 196
Bằng cách này, có thể sử dụng một phần mà không cần khai báo tất cả các biến cục bộ Mỗi phần cũng có một biến cục bộ có cùng tên với phần (trừ dấu gạch dưới ở đầu). Bạn có thể chuyển một đối tượng vào biến cục bộ này thông qua tùy chọn 800 46Bản saoTrong phần 801, biến 801 sẽ tham chiếu đến 803 từ chế độ xem gốcNếu bạn có một phiên bản mô hình để kết xuất thành một phần, bạn có thể sử dụng cú pháp tốc ký Giả sử rằng biến thể hiện 804 chứa một thể hiện của mô hình 805, điều này sẽ sử dụng 806 để hiển thị nó và sẽ chuyển biến cục bộ 801 vào một phần sẽ tham chiếu đến biến thể hiện 804 trong chế độ xem gốcPartials rất hữu ích trong việc kết xuất các bộ sưu tập. Khi bạn chuyển một bộ sưu tập thành một phần thông qua tùy chọn 809, một phần sẽ được chèn một lần cho mỗi thành viên trong bộ sưu tập
Khi một phần được gọi với một bộ sưu tập số nhiều, thì các phiên bản riêng lẻ của một phần có quyền truy cập vào thành viên của bộ sưu tập được hiển thị thông qua một biến được đặt tên theo một phần. Trong trường hợp này, một phần là 812 và trong phần 812, bạn có thể tham khảo 13 để biết phiên bản đang được hiển thịNgoài ra còn có một tốc ký cho điều này. Giả sử 815 là một tập hợp các trường hợp của 816, bạn chỉ cần viết điều này vào 80 để tạo ra kết quả tương tự 49Bản saoRails xác định tên của part sẽ sử dụng bằng cách xem tên model trong bộ sưu tập. Trên thực tế, bạn thậm chí có thể tạo một bộ sưu tập không đồng nhất và hiển thị nó theo cách này và Rails sẽ chọn phần thích hợp cho từng thành viên của bộ sưu tập
Trong trường hợp này, Rails sẽ sử dụng các phần của khách hàng hoặc nhân viên phù hợp với từng thành viên của bộ sưu tập Trong trường hợp bộ sưu tập trống, 00 sẽ trả về con số không, vì vậy việc cung cấp nội dung thay thế sẽ khá đơn giản 73Bản saoĐể sử dụng tên biến cục bộ tùy chỉnh trong một phần, hãy chỉ định tùy chọn 822 trong lệnh gọi đến một phần 74Bản saoVới thay đổi này, bạn có thể truy cập một phiên bản của bộ sưu tập 815 dưới dạng biến cục bộ 824 trong phầnBạn cũng có thể chuyển các biến cục bộ tùy ý cho bất kỳ phần nào bạn đang kết xuất bằng tùy chọn 825 75Bản saoTrong trường hợp này, partial sẽ có quyền truy cập vào một biến cục bộ 826 với giá trị "Products Page"Rails cũng cung cấp một biến đếm trong một phần được gọi bởi tập hợp, được đặt tên theo tiêu đề của phần theo sau bởi 827. Ví dụ: khi hiển thị bộ sưu tập 815, một phần của 811 có thể truy cập biến 830, biến này lập chỉ mục số lần nó được hiển thị trong chế độ xem kèm theo. Lưu ý rằng nó cũng áp dụng khi tên một phần được thay đổi bằng cách sử dụng tùy chọn 831. Ví dụ: biến đếm cho đoạn mã trên sẽ là 832Bạn cũng có thể chỉ định phần thứ hai sẽ được hiển thị giữa các phiên bản của phần chính bằng cách sử dụng tùy chọn 833 76Bản saoRails sẽ hiển thị một phần của 834 (không có dữ liệu nào được truyền vào nó) giữa mỗi cặp của 812 một phầnKhi hiển thị các bộ sưu tập, cũng có thể sử dụng tùy chọn 66 77Bản saoBố cục sẽ được hiển thị cùng với phần của từng mục trong bộ sưu tập. Các biến object và object_counter hiện tại cũng sẽ có sẵn trong bố cục, giống như cách chúng ở trong một phần Bạn có thể thấy rằng ứng dụng của mình yêu cầu bố cục hơi khác so với bố cục ứng dụng thông thường để hỗ trợ một bộ điều khiển cụ thể. Thay vì lặp lại và chỉnh sửa bố cục chính, bạn có thể thực hiện việc này bằng cách sử dụng các bố cục lồng nhau (đôi khi được gọi là các mẫu phụ). Đây là một ví dụ Giả sử bạn có bố cục 08 sau
Trên các trang được tạo bởi 839, bạn muốn ẩn menu trên cùng và thêm menu bên phải
Đó là nó. Chế độ xem Tin tức sẽ sử dụng bố cục mới, ẩn menu trên cùng và thêm menu bên phải mới bên trong div "nội dung" Có một số cách để nhận được kết quả tương tự với các sơ đồ tạo khuôn phụ khác nhau bằng kỹ thuật này. Lưu ý rằng không có giới hạn về mức độ lồng nhau. Người ta có thể sử dụng phương pháp 841 thông qua 842 để tạo bố cục mới dựa trên bố cục Tin tức. Nếu bạn chắc chắn rằng bạn sẽ không tạo mẫu phụ cho bố cục 843, bạn có thể thay thế 844 bằng một cách đơn giản là 169Phản hồiBạn được khuyến khích giúp cải thiện chất lượng của hướng dẫn này Vui lòng đóng góp nếu bạn thấy bất kỳ lỗi chính tả hoặc lỗi thực tế nào. Để bắt đầu, bạn có thể đọc phần của chúng tôi Bạn cũng có thể tìm thấy nội dung không đầy đủ hoặc nội dung không được cập nhật. Vui lòng thêm bất kỳ tài liệu còn thiếu nào cho chính. Đảm bảo kiểm tra Hướng dẫn cạnh trước để xác minh xem sự cố đã được khắc phục hay chưa trên nhánh chính. Kiểm tra Hướng dẫn Hướng dẫn Ruby on Rails để biết phong cách và quy ước Nếu vì bất kỳ lý do gì mà bạn phát hiện ra điều gì đó cần khắc phục nhưng không thể tự vá nó, vui lòng mở một vấn đề Và cuối cùng nhưng không kém phần quan trọng, bất kỳ loại thảo luận nào liên quan đến tài liệu Ruby on Rails đều rất được hoan nghênh trên Diễn đàn Ruby on Rails chính thức |