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
- Gọi để tạo phản hồi đầy đủ để gửi lại cho trình duyệt
- Gọi để gửi mã trạng thái chuyển hướng HTTP tới trình duyệt
- Gọi để tạo phản hồi chỉ bao gồm các tiêu đề HTTP để gửi lại cho trình duyệt
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
Books are coming soon!
03 của mìnhclass BooksController < ApplicationController
end
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
Books are coming soon!
04Books are coming soon!
Bản saoRails sẽ tự động hiển thị
Books are coming soon!
04 khi bạn điều hướng đến Books are coming soon!
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
Books are coming soon!
07 của mình và thêm hành động chỉ mục vào Books are coming soon!
03class BooksController < ApplicationController
def index
@books = Book.all
end
end
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
Books are coming soon!
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 Books are coming soon!
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
class BooksController < ApplicationController
end
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
Books are coming soon!
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
Books are coming soon!
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
Books are coming soon!
00 mà không cần kiểm tra nó trong trình duyệt, bạn có thể gọi tới Books are coming soon!
16. Phương thức này có các tùy chọn chính xác giống như Books are coming soon!
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
Books are coming soon!
00 với tên của chế độ xemclass BooksController < ApplicationController
end
8Bản saoNếu cuộc gọi đến
Books are coming soon!
19 không thành công, việc gọi hành động Books are coming soon!
19 trong bộ điều khiển này sẽ hiển thị mẫu Books are coming soon!
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ị
Books are coming soon!
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
Books are coming soon!
24 sống trong Books are coming soon!
25, bạn có thể hiển thị kết quả của một hành động cho một mẫu trong Books are coming soon!
26 theo cách nàyBooks are coming soon!
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
Books are coming soon!
27 [được yêu cầu trên Rails 2. 2 trở về trước]Books are coming soon!
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
Books are coming soon!
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 Books are coming soon!
21 trong thư mục Books are coming soon!
30Books are coming soon!
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
Books are coming soon!
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 Books are coming soon!
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ệBooks are coming soon!
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
Books are coming soon!
35Books are coming soon!
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
Books are coming soon!
36 đến Books are coming soon!
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
Books are coming soon!
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 Books are coming soon!
39 và sử dụng phần mở rộng Books are coming soon!
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
Books are coming soon!
41 để gửi tới Books are coming soon!
00Books are coming soon!
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
Books are coming soon!
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 Books are coming soon!
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
Books are coming soon!
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 Books are coming soon!
46, Books are coming soon!
00 sẽ tự động gọi Books are coming soon!
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
Books are coming soon!
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 Books are coming soon!
50, Books are coming soon!
00 sẽ tự động gọi Books are coming soon!
49 cho bạnRails có thể hiển thị vanilla JavaScript
Books are coming soon!
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à
Books are coming soon!
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
Books are coming soon!
54 thành Books are coming soon!
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
Books are coming soon!
36 hoặc Books are coming soon!
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à
Books are coming soon!
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
Books are coming soon!
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
Books are coming soon!
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ạnBooks are coming soon!
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
Books are coming soon!
61Books are coming soon!
4Bản saoĐiều này gọi
Books are coming soon!
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
65Books are coming soon!
66Books are coming soon!
67Books are coming soon!
68Books are coming soon!
69Books are coming soon!
70Books are coming soon!
Books are coming soon!
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à
Books are coming soon!
72 [hoặc Books are coming soon!
73 nếu bạn sử dụng tùy chọn Books are coming soon!
46 hoặc Books are coming soon!
75 cho tùy chọn Books are coming soon!
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 Books are coming soon!
65Books are coming soon!
5Bản sao2. 2. 13. 2 Tùy chọn Books are coming soon!
66Với hầu hết các tùy chọn cho
Books are coming soon!
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
Books are coming soon!
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ạiBooks are coming soon!
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
Books are coming soon!
67 để đặt tiêu đề HTTP Books are coming soon!
82Books are coming soon!
7Bản sao2. 2. 13. 4 Tùy chọn Books are coming soon!
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à
Books are coming soon!
84]. Bạn có thể sử dụng tùy chọn Books are coming soon!
68 để thay đổi điều nàyBooks are coming soon!
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ọnBooks are coming soon!
69Rails sử dụng định dạng được chỉ định trong yêu cầu [hoặc
Books are coming soon!
41 theo mặc định]. Bạn có thể thay đổi điều này thông qua tùy chọn Books are coming soon!
69 bằng một ký hiệu hoặc một mảngBooks are coming soon!
9Bản saoNếu một mẫu có định dạng được chỉ định không tồn tại, lỗi
Books are coming soon!
89 sẽ xuất hiện2. 2. 13. 6 Tùy chọn Books are coming soon!
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
Books are coming soon!
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
class BooksController < ApplicationController
def index
@books = Book.all
end
end
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
92Books are coming soon!
93Books are coming soon!
94Books are coming soon!
Nếu một mẫu có định dạng được chỉ định không tồn tại, lỗi
Books are coming soon!
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
class BooksController < ApplicationController
def index
@books = Book.all
end
end
1Bản saoĐể tìm bố cục hiện tại, trước tiên Rails tìm một tệp trong
Books are coming soon!
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 Books are coming soon!
97 sẽ sử dụng Books are coming soon!
98 [hoặc Books are coming soon!
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 class BooksController < ApplicationController
def index
@books = Book.all
end
end
00 hoặc class BooksController < ApplicationController
def index
@books = Book.all
end
end
01. Nếu không có bố cục class BooksController < ApplicationController
def index
@books = Book.all
end
end
02, Rails sẽ sử dụng bố cục class BooksController < ApplicationController
def index
@books = Book.all
end
end
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ụ
class BooksController < ApplicationController
def index
@books = Book.all
end
end
2Bản saoVới tuyên bố này, tất cả các chế độ xem được hiển thị bởi
class BooksController < ApplicationController
def index
@books = Book.all
end
end
05 sẽ sử dụng class BooksController < ApplicationController
def index
@books = Book.all
end
end
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
class BooksController < ApplicationController
def index
@books = Book.all
end
end
04 trong lớp class BooksController < ApplicationController
def index
@books = Book.all
end
end
08 của bạnclass BooksController < ApplicationController
def index
@books = Book.all
end
end
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
class BooksController < ApplicationController
def index
@books = Book.all
end
end
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ý
class BooksController < ApplicationController
def index
@books = Book.all
end
end
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
class BooksController < ApplicationController
def index
@books = Book.all
end
end
10, vì vậy bố cục có thể được xác định dựa trên yêu cầu hiện tạiclass BooksController < ApplicationController
def index
@books = Book.all
end
end
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
class BooksController < ApplicationController
def index
@books = Book.all
end
end
11 và class BooksController < ApplicationController
def index
@books = Book.all
end
end
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ểnclass BooksController < ApplicationController
def index
@books = Book.all
end
end
6Bản saoVới khai báo này, bố cục
class BooksController < ApplicationController
def index
@books = Book.all
end
end
13 sẽ được sử dụng cho mọi thứ trừ các phương thức class BooksController < ApplicationController
def index
@books = Book.all
end
end
14 và class BooksController < ApplicationController
def index
@books = Book.all
end
end
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ụ
16class BooksController < ApplicationController def index @books = Book.all end end
7Bản saoclass BooksController < ApplicationController def index @books = Book.all end end
17class BooksController < ApplicationController def index @books = Book.all end end
8Bản saoclass BooksController < ApplicationController def index @books = Book.all end end
18class BooksController < ApplicationController def index @books = Book.all end end
9Bản saoclass BooksController < ApplicationController def index @books = Book.all end end
19class BooksController < ApplicationController def index @books = Book.all end end
10Bản saoclass BooksController < ApplicationController end
trong ứng dụng này
- Nói chung, các khung nhìn sẽ được hiển thị trong bố cục
20class BooksController < ApplicationController def index @books = Book.all end end
21 sẽ sử dụng bố cụcclass BooksController < ApplicationController def index @books = Book.all end end
20class BooksController < ApplicationController def index @books = Book.all end end
23 sẽ sử dụng bố cụcclass BooksController < ApplicationController def index @books = Book.all end end
24class BooksController < ApplicationController def index @books = Book.all end end
25 sẽ không sử dụng bố cục nào cảclass BooksController < ApplicationController def index @books = Book.all end end
26 sẽ sử dụng bố cụcclass BooksController < ApplicationController def index @books = Book.all end end
27class BooksController < ApplicationController def index @books = Book.all end end
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ụ
class BooksController < ApplicationController
end
11Bản saoclass BooksController < ApplicationController
end
12Bản saoclass BooksController < ApplicationController
end
13Bản saoThứ tự tra cứu cho một hành động
class BooksController < ApplicationController
def index
@books = Book.all
end
end
28 sẽ là
29class BooksController < ApplicationController def index @books = Book.all end end
30class BooksController < ApplicationController def index @books = Book.all end end
31class BooksController < ApplicationController def index @books = Book.all end end
Điều này làm cho
class BooksController < ApplicationController
def index
@books = Book.all
end
end
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ậyclass BooksController < ApplicationController
end
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
Books are coming soon!
00Ví dụ: đây là một số mã sẽ gây ra lỗi này
class BooksController < ApplicationController
end
15Bản saoNếu
class BooksController < ApplicationController
def index
@books = Book.all
end
end
34 đánh giá thành class BooksController < ApplicationController
def index
@books = Book.all
end
end
35, Rails sẽ bắt đầu quá trình kết xuất để kết xuất biến class BooksController < ApplicationController
def index
@books = Book.all
end
end
36 vào chế độ xem class BooksController < ApplicationController
def index
@books = Book.all
end
end
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 class BooksController < ApplicationController
def index
@books = Book.all
end
end
38 chạy và khi Rails kết thúc hành động, nó sẽ bắt đầu hiển thị chế độ xem class BooksController < ApplicationController
def index
@books = Book.all
end
end
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 Books are coming soon!
00 hoặc class BooksController < ApplicationController
def index
@books = Book.all
end
end
41 trong một đường dẫn mã duy nhất. Một điều có thể giúp ích là class BooksController < ApplicationController
def index
@books = Book.all
end
end
42. Đây là một phiên bản vá của phương phápclass BooksController < ApplicationController
end
16Bản saoĐảm bảo sử dụng
class BooksController < ApplicationController
def index
@books = Book.all
end
end
42 thay vì class BooksController < ApplicationController
def index
@books = Book.all
end
end
44 vì class BooksController < ApplicationController
def index
@books = Book.all
end
end
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
Books are coming soon!
00 đã được gọi, vì vậy phần sau sẽ hoạt động mà không có lỗiclass BooksController < ApplicationController
end
17Bản saoThao tác này sẽ hiển thị sách có
class BooksController < ApplicationController
def index
@books = Book.all
end
end
47 được đặt theo mẫu class BooksController < ApplicationController
def index
@books = Book.all
end
end
37, trong khi các sách khác sẽ hiển thị theo mẫu class BooksController < ApplicationController
def index
@books = Book.all
end
end
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,
Books are coming soon!
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 Books are coming soon!
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àyclass BooksController < ApplicationController
end
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 đề
class BooksController < ApplicationController
def index
@books = Book.all
end
end
55 không đảm bảo được đặt bởi trình duyệt, vì vậy bạn phải cung cấp class BooksController < ApplicationController
def index
@books = Book.all
end
end
56 để sử dụng trong trường hợp nàyclass BooksController < ApplicationController
end
19Bản saoBooks are coming soon!
01 và class BooksController < ApplicationController
def index
@books = Book.all
end
end
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 class BooksController < ApplicationController
def index
@books = Book.all
end
end
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
Books are coming soon!
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 Books are coming soon!
68class BooksController < ApplicationController
end
80Bản saoGiống như tùy chọn
Books are coming soon!
68 cho Books are coming soon!
00, Books are coming soon!
68 cho Books are coming soon!
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ề
Books are coming soon!
01 như một loại lệnh class BooksController < ApplicationController
def index
@books = Book.all
end
end
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
class BooksController < ApplicationController
end
81Bản saoVới code ở dạng này, rất có thể sẽ xảy ra vấn đề nếu biến
class BooksController < ApplicationController
def index
@books = Book.all
end
end
36 là class BooksController < ApplicationController
def index
@books = Book.all
end
end
71. Hãy nhớ rằng, một class BooksController < ApplicationController
def index
@books = Book.all
end
end
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 class BooksController < ApplicationController
def index
@books = Book.all
end
end
73 mà chế độ xem class BooksController < ApplicationController
def index
@books = Book.all
end
end
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ịclass BooksController < ApplicationController
end
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
class BooksController < ApplicationController
def index
@books = Book.all
end
end
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
class BooksController < ApplicationController
def index
@books = Book.all
end
end
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 class BooksController < ApplicationController
def index
@books = Book.all
end
end
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
class BooksController < ApplicationController
end
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
class BooksController < ApplicationController
def index
@books = Book.all
end
end
73 với tất cả các sách trong mô hình, sau đó hiển thị trực tiếp mẫu class BooksController < ApplicationController
def index
@books = Book.all
end
end
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
Books are coming soon!
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
class BooksController < ApplicationController
end
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
class BooksController < ApplicationController
end
85Bản saoMà sẽ sản xuất
class BooksController < ApplicationController
end
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ù
class BooksController < ApplicationController
def index
@books = Book.all
end
end
83, class BooksController < ApplicationController
def index
@books = Book.all
end
end
84 và class BooksController < ApplicationController
def index
@books = Book.all
end
end
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 [
class BooksController < ApplicationController
def index
@books = Book.all
end
end
88, class BooksController < ApplicationController
def index
@books = Book.all
end
end
89 hoặc Books are coming soon!
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ẻclass BooksController < ApplicationController
end
87Bản saoCó ba tùy chọn thẻ có sẵn cho
class BooksController < ApplicationController
def index
@books = Book.all
end
end
83
92 chỉ định giá trịclass BooksController < ApplicationController def index @books = Book.all end end
93 trong liên kết. Giá trị mặc định là "thay thế"class BooksController < ApplicationController def index @books = Book.all end end
35 chỉ định loại MIME rõ ràng. Rails sẽ tự động tạo ra một loại MIME phù hợpBooks are coming soon!
95 chỉ định tiêu đề của liên kết. Giá trị mặc định là giá trịclass BooksController < ApplicationController def index @books = Book.all end end
35 viết hoa, ví dụ: "ATOM" hoặc "RSS"Books are coming soon!
Trình trợ giúp trả về thẻ HTML
class BooksController < ApplicationController
def index
@books = Book.all
end
end
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
class BooksController < ApplicationController
end
100 thay vì class BooksController < ApplicationController
end
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í.
class BooksController < ApplicationController
end
102, class BooksController < ApplicationController
end
103 hoặc class BooksController < ApplicationController
end
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à
class BooksController < ApplicationController
end
105 bên trong một trong số class BooksController < ApplicationController
end
102, class BooksController < ApplicationController
end
103 hoặc class BooksController < ApplicationController
end
104, bạn sẽ làm điều nàyclass BooksController < ApplicationController
end
88Bản saoSau đó, Rails sẽ xuất một thẻ
class BooksController < ApplicationController
def index
@books = Book.all
end
end
99 như thế nàyclass BooksController < ApplicationController
end
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ư
class BooksController < ApplicationController
end
110 và class BooksController < ApplicationController
end
111 cùng một lúcBooks are coming soon!
20Bản saoBao gồm
class BooksController < ApplicationController
end
110 và class BooksController < ApplicationController
end
113Books are coming soon!
21Bản saoĐể bao gồm
class BooksController < ApplicationController
end
114Books are coming soon!
22Bản saoTrình trợ giúp trả về thẻ HTML
class BooksController < ApplicationController
end
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
class BooksController < ApplicationController
end
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í. class BooksController < ApplicationController
end
102, class BooksController < ApplicationController
end
103 hoặc class BooksController < ApplicationController
end
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à
class BooksController < ApplicationController
end
122 bên trong một trong số class BooksController < ApplicationController
end
102, class BooksController < ApplicationController
end
103 hoặc class BooksController < ApplicationController
end
104, bạn sẽ làm điều nàyBooks are coming soon!
23Bản saoĐể bao gồm
class BooksController < ApplicationController
end
126 và class BooksController < ApplicationController
end
127Books are coming soon!
24Bản saoĐể bao gồm
class BooksController < ApplicationController
end
126 và class BooksController < ApplicationController
end
129Books are coming soon!
25Bản saoĐể bao gồm
class BooksController < ApplicationController
end
130Books are coming soon!
26Bản saoTheo mặc định,
class BooksController < ApplicationController
def index
@books = Book.all
end
end
85 tạo liên kết với class BooksController < ApplicationController
end
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 [class BooksController < ApplicationController
def index
@books = Book.all
end
end
92]Books are coming soon!
27Bản saoTrình trợ giúp tạo thẻ HTML
class BooksController < ApplicationController
end
136 cho tệp đã chỉ định. Theo mặc định, các tệp được tải từ class BooksController < ApplicationController
end
137Lưu ý rằng bạn phải chỉ định phần mở rộng của hình ảnh
Books are coming soon!
28Bản saoBạn có thể cung cấp một đường dẫn đến hình ảnh nếu bạn muốn
Books are coming soon!
29Bản saoBạn có thể cung cấp hàm băm của các tùy chọn HTML bổ sung
Books are coming soon!
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ã
Books are coming soon!
81Bản saoBạn cũng có thể chỉ định thẻ kích thước đặc biệt, ở định dạng "{width}x{height}"
Books are coming soon!
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ư
class BooksController < ApplicationController
end
138, class BooksController < ApplicationController
end
139 hoặc class BooksController < ApplicationController
end
140Books are coming soon!
83Bản saoTrình trợ giúp tạo thẻ HTML5
class BooksController < ApplicationController
end
117 cho tệp đã chỉ định. Theo mặc định, các tệp được tải từ class BooksController < ApplicationController
end
144Books are coming soon!
84Bản saosản xuất
class BooksController < ApplicationController
end
89Bản saoGiống như một
class BooksController < ApplicationController
end
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 class BooksController < ApplicationController
end
144. Ngoài ra, bạn có thể chỉ định tùy chọn class BooksController < ApplicationController
end
147 giống như tùy chọn class BooksController < ApplicationController
end
134. Thẻ video cũng có thể có bất kỳ tùy chọn HTML nào được chỉ định ở cuối [class BooksController < ApplicationController
end
149, class BooksController < ApplicationController
end
150 et al]Thẻ video cũng hỗ trợ tất cả các tùy chọn HTML của
class BooksController < ApplicationController
end
117 thông qua hàm băm tùy chọn HTML, bao gồm
152, cung cấp hình ảnh để đặt vào vị trí của video trước khi bắt đầu phátclass BooksController < ApplicationController end
153, bắt đầu phát video khi tải trangclass BooksController < ApplicationController end
154, lặp lại video khi đến cuốiclass BooksController < ApplicationController end
155, cung cấp các điều khiển do trình duyệt cung cấp để người dùng tương tác với videoclass BooksController < ApplicationController end
156, video sẽ tải trước tệp cho người dùng khi tải trangclass BooksController < ApplicationController end
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
class BooksController < ApplicationController
end
141Books are coming soon!
86Bản saoĐiều này sẽ sản xuất
Books are coming soon!
87Bản saoTrình trợ giúp tạo thẻ HTML5
class BooksController < ApplicationController
end
117 cho tệp đã chỉ định. Theo mặc định, các tệp được tải từ class BooksController < ApplicationController
end
161Books are coming soon!
88Bản saoBạn có thể cung cấp đường dẫn đến tệp âm thanh nếu muốn
Books are coming soon!
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ư
class BooksController < ApplicationController
end
139, class BooksController < ApplicationController
end
138, v.v.Giống như
class BooksController < ApplicationController
end
141, class BooksController < ApplicationController
end
158 có các tùy chọn đặc biệt
153, bắt đầu phát âm thanh khi tải trangclass BooksController < ApplicationController end
155, cung cấp các điều khiển do trình duyệt cung cấp để người dùng tương tác với âm thanhclass BooksController < ApplicationController end
156, âm thanh sẽ tải trước tệp cho người dùng khi tải trangclass BooksController < ApplicationController end
Trong ngữ cảnh của một bố cục,
class BooksController < ApplicationController
end
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 class BooksController < ApplicationController
end
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àoBooks are coming soon!
00Bản saoBạn cũng có thể tạo bố cục với nhiều vùng năng suất
Books are coming soon!
01Bản saoPhần chính của chế độ xem sẽ luôn hiển thị thành
class BooksController < ApplicationController
end
169 chưa được đặt tên. Để hiển thị nội dung thành một tên class BooksController < ApplicationController
end
169, bạn sử dụng phương thức class BooksController < ApplicationController
end
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à
class BooksController < ApplicationController
end
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 xemBooks are coming soon!
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
Books are coming soon!
03Bản saoPhương pháp
class BooksController < ApplicationController
end
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
class BooksController < ApplicationController
end
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ácBooks are coming soon!
04Bản saoMã đó sẽ lấy một phần từ
class BooksController < ApplicationController
end
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
Books are coming soon!
05Bản saoỞ đây, các phần
class BooksController < ApplicationController
end
182 và class BooksController < ApplicationController
end
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,
class BooksController < ApplicationController
end
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ự
185class BooksController < ApplicationController end
06Bản saoBooks are coming soon!
186class BooksController < ApplicationController end
07Bản saoBooks are coming soon!
187class BooksController < ApplicationController end
08Bản saoBooks are coming soon!
Đố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
Books are coming soon!
09Bản saoĐiều này sẽ tìm kiếm một phần có tên là
class BooksController < ApplicationController
end
188 và hiển thị nó bằng cách sử dụng bố cục class BooksController < ApplicationController
end
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 class BooksController < ApplicationController
end
190 chính]Cũng lưu ý rằng cần chỉ định rõ ràng
class BooksController < ApplicationController
end
191 khi chuyển các tùy chọn bổ sung, chẳng hạn như Books are coming soon!
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
193class BooksController < ApplicationController end
40Bản saoBooks are coming soon!
21Books are coming soon!
41Bản saoBooks are coming soon!
195class BooksController < ApplicationController end
42Bản saoBooks are coming soon!
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
class BooksController < ApplicationController
end
196
80class BooksController < ApplicationController def index @books = Book.all end end
43Bản saoBooks are coming soon!
198class BooksController < ApplicationController end
44Bản saoBooks are coming soon!
199class BooksController < ApplicationController end
45Bản saoBooks are coming soon!
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
class BooksController < ApplicationController
end
800Books are coming soon!
46Bản saoTrong phần
class BooksController < ApplicationController
end
801, biến class BooksController < ApplicationController
end
801 sẽ tham chiếu đến class BooksController < ApplicationController
end
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
class BooksController < ApplicationController
end
804 chứa một thể hiện của mô hình class BooksController < ApplicationController
end
805, điều này sẽ sử dụng class BooksController < ApplicationController
end
806 để hiển thị nó và sẽ chuyển biến cục bộ class BooksController < ApplicationController
end
801 vào một phần sẽ tham chiếu đến biến thể hiện class BooksController < ApplicationController
end
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
class BooksController < ApplicationController
end
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
80class BooksController < ApplicationController def index @books = Book.all end end
47Bản saoBooks are coming soon!
811class BooksController < ApplicationController end
48Bản saoBooks are coming soon!
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à
class BooksController < ApplicationController
end
812 và trong phần class BooksController < ApplicationController
end
812, bạn có thể tham khảo class BooksController < ApplicationController
def index
@books = Book.all
end
end
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ử
class BooksController < ApplicationController
end
815 là một tập hợp các trường hợp của class BooksController < ApplicationController
end
816, bạn chỉ cần viết điều này vào class BooksController < ApplicationController
def index
@books = Book.all
end
end
80 để tạo ra kết quả tương tựBooks are coming soon!
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
80class BooksController < ApplicationController def index @books = Book.all end end
70Bản saoBooks are coming soon!
819class BooksController < ApplicationController end
71Bản saoBooks are coming soon!
820class BooksController < ApplicationController end
72Bản saoBooks are coming soon!
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,
Books are coming soon!
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ảnBooks are coming soon!
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
class BooksController < ApplicationController
end
822 trong lệnh gọi đến một phầnBooks are coming soon!
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
class BooksController < ApplicationController
end
815 dưới dạng biến cục bộ class BooksController < ApplicationController
end
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
class BooksController < ApplicationController
end
825Books are coming soon!
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ộ
class BooksController < ApplicationController
end
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
class BooksController < ApplicationController
end
827. Ví dụ: khi hiển thị bộ sưu tập class BooksController < ApplicationController
end
815, một phần của class BooksController < ApplicationController
end
811 có thể truy cập biến class BooksController < ApplicationController
end
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 class BooksController < ApplicationController
end
831. Ví dụ: biến đếm cho đoạn mã trên sẽ là class BooksController < ApplicationController
end
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
class BooksController < ApplicationController
end
833Books are coming soon!
76Bản saoRails sẽ hiển thị một phần của
class BooksController < ApplicationController
end
834 [không có dữ liệu nào được truyền vào nó] giữa mỗi cặp của class BooksController < ApplicationController
end
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
Books are coming soon!
66Books are coming soon!
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
class BooksController < ApplicationController
def index
@books = Book.all
end
end
08 sau
00class BooksController < ApplicationController def index @books = Book.all end end
78Bản saoBooks are coming soon!
Trên các trang được tạo bởi
class BooksController < ApplicationController
end
839, bạn muốn ẩn menu trên cùng và thêm menu bên phải
840class BooksController < ApplicationController end
79Bản saoBooks are coming soon!
Đó 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
class BooksController < ApplicationController
end
841 thông qua class BooksController < ApplicationController
end
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 class BooksController < ApplicationController
end
843, bạn có thể thay thế class BooksController < ApplicationController
end
844 bằng một cách đơn giản là class BooksController < ApplicationController
end
169Phản hồi
Bạ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