Css con cuối lồng nhau

Bộ định tuyến Rails nhận ra các URL và gửi chúng tới hành động của bộ điều khiển hoặc tới ứng dụng Rack. Nó cũng có thể tạo đường dẫn và URL, tránh phải mã hóa cứng các chuỗi trong chế độ xem của bạn

1. 1 Kết nối URL với Mã

Khi ứng dụng Rails của bạn nhận được yêu cầu đến cho

nó yêu cầu bộ định tuyến khớp nó với một hành động của bộ điều khiển. Nếu tuyến đường phù hợp đầu tiên là

get '/patients/:id', to: 'patients#show'
Bản sao

yêu cầu được gửi đến hành động

get '/patients/:id', to: 'patients#show', as: 'patient'
11 của bộ điều khiển
get '/patients/:id', to: 'patients#show', as: 'patient'
10 với
get '/patients/:id', to: 'patients#show', as: 'patient'
12 trong
get '/patients/:id', to: 'patients#show', as: 'patient'
13

Rails sử dụng Snake_case cho tên bộ điều khiển ở đây, nếu bạn có bộ điều khiển nhiều từ như

get '/patients/:id', to: 'patients#show', as: 'patient'
14, bạn muốn sử dụng
get '/patients/:id', to: 'patients#show', as: 'patient'
15 chẳng hạn

1. 2 Tạo đường dẫn và URL từ mã

Bạn cũng có thể tạo đường dẫn và URL. Nếu tuyến đường trên được sửa đổi thành

get '/patients/:id', to: 'patients#show', as: 'patient'
Bản sao

và ứng dụng của bạn chứa mã này trong bộ điều khiển

@patient = Patient.find[params[:id]]
Bản sao

và điều này trong chế độ xem tương ứng


Bản sao

sau đó bộ định tuyến sẽ tạo đường dẫn

get '/patients/:id', to: 'patients#show', as: 'patient'
16. Điều này làm giảm độ giòn của chế độ xem của bạn và làm cho mã của bạn dễ hiểu hơn. Lưu ý rằng id không cần được chỉ định trong trình trợ giúp tuyến đường

1. 3 Định cấu hình Bộ định tuyến Rails

Các tuyến cho ứng dụng hoặc công cụ của bạn nằm trong tệp

get '/patients/:id', to: 'patients#show', as: 'patient'
17 và thường trông như thế này

get '/patients/:id', to: 'patients#show', as: 'patient'
2Bản sao

Vì đây là tệp nguồn Ruby thông thường, bạn có thể sử dụng tất cả các tính năng của nó để giúp bạn xác định tuyến đường của mình nhưng hãy cẩn thận với các tên biến vì chúng có thể xung đột với các phương thức DSL của bộ định tuyến

Khối

get '/patients/:id', to: 'patients#show', as: 'patient'
18 bao bọc các định nghĩa tuyến đường của bạn là bắt buộc để thiết lập phạm vi cho DSL của bộ định tuyến và không được xóa

Định tuyến tài nguyên cho phép bạn nhanh chóng khai báo tất cả các tuyến chung cho một bộ điều khiển tài nguyên nhất định. Một cuộc gọi duy nhất tới

get '/patients/:id', to: 'patients#show', as: 'patient'
19 có thể khai báo tất cả các tuyến đường cần thiết cho các hành động
get '/patients/:id', to: 'patients#show', as: 'patient'
20,
get '/patients/:id', to: 'patients#show', as: 'patient'
11,
get '/patients/:id', to: 'patients#show', as: 'patient'
22,
get '/patients/:id', to: 'patients#show', as: 'patient'
23,
get '/patients/:id', to: 'patients#show', as: 'patient'
24,
get '/patients/:id', to: 'patients#show', as: 'patient'
25 và
get '/patients/:id', to: 'patients#show', as: 'patient'
26 của bạn

2. 1 Tài nguyên trên Web

Trình duyệt yêu cầu các trang từ Rails bằng cách yêu cầu một URL bằng một phương thức HTTP cụ thể, chẳng hạn như

get '/patients/:id', to: 'patients#show', as: 'patient'
27,
get '/patients/:id', to: 'patients#show', as: 'patient'
28,
get '/patients/:id', to: 'patients#show', as: 'patient'
29,
get '/patients/:id', to: 'patients#show', as: 'patient'
30 và
get '/patients/:id', to: 'patients#show', as: 'patient'
31. Mỗi phương thức là một yêu cầu để thực hiện một thao tác trên tài nguyên. Một tuyến tài nguyên ánh xạ một số yêu cầu liên quan đến các hành động trong một bộ điều khiển duy nhất

Khi ứng dụng Rails của bạn nhận được yêu cầu đến cho

nó yêu cầu bộ định tuyến ánh xạ nó tới một hành động của bộ điều khiển. Nếu tuyến đường phù hợp đầu tiên là

Rails sẽ gửi yêu cầu đó đến hành động

get '/patients/:id', to: 'patients#show', as: 'patient'
26 trên bộ điều khiển
get '/patients/:id', to: 'patients#show', as: 'patient'
33 với
get '/patients/:id', to: 'patients#show', as: 'patient'
12 trong
get '/patients/:id', to: 'patients#show', as: 'patient'
13

2. 2 CRUD, Động từ và Hành động

Trong Rails, một tuyến tháo vát cung cấp ánh xạ giữa các động từ HTTP và URL tới các hành động của bộ điều khiển. Theo quy ước, mỗi hành động cũng ánh xạ tới một hoạt động CRUD cụ thể trong cơ sở dữ liệu. Một mục duy nhất trong tệp định tuyến, chẳng hạn như

tạo bảy tuyến đường khác nhau trong ứng dụng của bạn, tất cả ánh xạ tới bộ điều khiển

get '/patients/:id', to: 'patients#show', as: 'patient'
36

HTTP VerbPathController#ActionUsed forGET/photosphotos#indexhiển thị danh sách tất cả ảnhGET/photos/newphotos#newreturn form HTML để tạo ảnh mớiPOST/photosphotos#createtạo ảnh mớiGET/photos/. idphotos#showhiển thị một ảnh cụ thểGET/photos/. id/editphotos#editreturn form HTML để chỉnh sửa ảnhPATCH/PUT/photos/. idphotos#updatecập nhật một ảnh cụ thể XÓA/ảnh/. idphotos#destroyxóa một ảnh cụ thể

Vì bộ định tuyến sử dụng động từ HTTP và URL để khớp với các yêu cầu gửi đến, bốn URL ánh xạ tới bảy hành động khác nhau

Các tuyến đường ray được khớp theo thứ tự chúng được chỉ định, vì vậy nếu bạn có một

get '/patients/:id', to: 'patients#show', as: 'patient'
37 phía trên một
get '/patients/:id', to: 'patients#show', as: 'patient'
38 thì tuyến hành động của
get '/patients/:id', to: 'patients#show', as: 'patient'
11 cho dòng
get '/patients/:id', to: 'patients#show', as: 'patient'
19 sẽ được khớp trước dòng
get '/patients/:id', to: 'patients#show', as: 'patient'
41. Để khắc phục điều này, hãy di chuyển dòng
get '/patients/:id', to: 'patients#show', as: 'patient'
41 lên trên dòng
get '/patients/:id', to: 'patients#show', as: 'patient'
19 để nó được khớp trước

2. 3 Trình trợ giúp đường dẫn và URL

Tạo một tuyến đường tháo vát cũng sẽ hiển thị một số trình trợ giúp cho bộ điều khiển trong ứng dụng của bạn. Trong trường hợp của

get '/patients/:id', to: 'patients#show', as: 'patient'
37

  • get '/patients/:id', to: 'patients#show', as: 'patient'
    
    45 trả về
    get '/patients/:id', to: 'patients#show', as: 'patient'
    
    46
  • get '/patients/:id', to: 'patients#show', as: 'patient'
    
    47 trả về
    get '/patients/:id', to: 'patients#show', as: 'patient'
    
    48
  • get '/patients/:id', to: 'patients#show', as: 'patient'
    
    49 trả về
    get '/patients/:id', to: 'patients#show', as: 'patient'
    
    50 [ví dụ:
    get '/patients/:id', to: 'patients#show', as: 'patient'
    
    51 trả về
    get '/patients/:id', to: 'patients#show', as: 'patient'
    
    52]
  • get '/patients/:id', to: 'patients#show', as: 'patient'
    
    53 trả về
    get '/patients/:id', to: 'patients#show', as: 'patient'
    
    54 [ví dụ:
    get '/patients/:id', to: 'patients#show', as: 'patient'
    
    55 trả về
    get '/patients/:id', to: 'patients#show', as: 'patient'
    
    56]

Mỗi trình trợ giúp này có một trình trợ giúp

get '/patients/:id', to: 'patients#show', as: 'patient'
57 tương ứng [chẳng hạn như
get '/patients/:id', to: 'patients#show', as: 'patient'
58] trả về cùng một đường dẫn có tiền tố là máy chủ, cổng và tiền tố đường dẫn hiện tại

Nếu bạn cần tạo các tuyến đường cho nhiều tài nguyên, bạn có thể tiết kiệm một chút công việc nhập liệu bằng cách xác định tất cả chúng bằng một lệnh gọi duy nhất tới

get '/patients/:id', to: 'patients#show', as: 'patient'
19

get '/patients/:id', to: 'patients#show', as: 'patient'
5Bản sao

Điều này hoạt động chính xác giống như

get '/patients/:id', to: 'patients#show', as: 'patient'
6Bản sao

2. 5 tài nguyên số ít

Đôi khi, bạn có một tài nguyên mà khách hàng luôn tìm kiếm mà không cần tham chiếu ID. Ví dụ: bạn muốn

get '/patients/:id', to: 'patients#show', as: 'patient'
60 luôn hiển thị hồ sơ của người dùng hiện đang đăng nhập. Trong trường hợp này, bạn có thể sử dụng một tài nguyên duy nhất để ánh xạ
get '/patients/:id', to: 'patients#show', as: 'patient'
60 [chứ không phải
get '/patients/:id', to: 'patients#show', as: 'patient'
62] với hành động
get '/patients/:id', to: 'patients#show', as: 'patient'
11

get '/patients/:id', to: 'patients#show', as: 'patient'
1Bản sao

Vượt qua một

get '/patients/:id', to: 'patients#show', as: 'patient'
64 để
get '/patients/:id', to: 'patients#show', as: 'patient'
65 sẽ mong đợi một định dạng
get '/patients/:id', to: 'patients#show', as: 'patient'
66. Khi sử dụng một
get '/patients/:id', to: 'patients#show', as: 'patient'
67, tùy chọn
get '/patients/:id', to: 'patients#show', as: 'patient'
65 nên được thay thế bằng
get '/patients/:id', to: 'patients#show', as: 'patient'
69. Khi sử dụng một
get '/patients/:id', to: 'patients#show', as: 'patient'
64 mà không có một
get '/patients/:id', to: 'patients#show', as: 'patient'
71, tùy chọn
get '/patients/:id', to: 'patients#show', as: 'patient'
65 nên được thay thế bằng
get '/patients/:id', to: 'patients#show', as: 'patient'
73

get '/patients/:id', to: 'patients#show', as: 'patient'
2Bản sao

Con đường tháo vát này

get '/patients/:id', to: 'patients#show', as: 'patient'
3Bản sao

tạo sáu tuyến đường khác nhau trong ứng dụng của bạn, tất cả ánh xạ tới bộ điều khiển

get '/patients/:id', to: 'patients#show', as: 'patient'
74

HTTP VerbPathController#ActionUsed forGET/geocoder/newgeocoders#newtrả lại biểu mẫu HTML để tạo trình mã hóa địa lýPOST/geocodergeocoders#createtạo trình mã hóa địa lý mớiGET/geocodergeocoders#showdisplay tài nguyên trình mã hóa địa lý duy nhấtGET/geocoder/editgeocoders#editreturn biểu mẫu HTML để chỉnh sửa trình mã hóa địa lýPATCH/PUT

Bởi vì bạn có thể muốn sử dụng cùng một bộ điều khiển cho một tuyến đường số ít [

get '/patients/:id', to: 'patients#show', as: 'patient'
75] và tuyến đường số nhiều [
get '/patients/:id', to: 'patients#show', as: 'patient'
76], các tài nguyên số ít ánh xạ tới các bộ điều khiển số nhiều. Vì vậy, ví dụ,
get '/patients/:id', to: 'patients#show', as: 'patient'
77 và
get '/patients/:id', to: 'patients#show', as: 'patient'
37 tạo cả tuyến đường số ít và số nhiều ánh xạ tới cùng một bộ điều khiển [
get '/patients/:id', to: 'patients#show', as: 'patient'
79]

Một tuyến đường tháo vát duy nhất tạo ra những người trợ giúp này

  • get '/patients/:id', to: 'patients#show', as: 'patient'
    
    80 trả về
    get '/patients/:id', to: 'patients#show', as: 'patient'
    
    81
  • get '/patients/:id', to: 'patients#show', as: 'patient'
    
    82 trả về
    get '/patients/:id', to: 'patients#show', as: 'patient'
    
    83
  • get '/patients/:id', to: 'patients#show', as: 'patient'
    
    84 trả về
    get '/patients/:id', to: 'patients#show', as: 'patient'
    
    85

Cuộc gọi đến

get '/patients/:id', to: 'patients#show', as: 'patient'
86 là cần thiết để chuyển đổi các phiên bản của
get '/patients/:id', to: 'patients#show', as: 'patient'
87 thành các tuyến thông qua nhận dạng bản ghi

Giống như với các tài nguyên số nhiều, các trình trợ giúp tương tự kết thúc bằng

get '/patients/:id', to: 'patients#show', as: 'patient'
57 cũng sẽ bao gồm tiền tố máy chủ, cổng và đường dẫn

2. 6 Không gian tên điều khiển và định tuyến

Bạn có thể muốn tổ chức các nhóm bộ điều khiển trong một không gian tên. Thông thường nhất, bạn có thể nhóm một số bộ điều khiển quản trị trong một không gian tên

get '/patients/:id', to: 'patients#show', as: 'patient'
89 và đặt các bộ điều khiển này trong thư mục
get '/patients/:id', to: 'patients#show', as: 'patient'
90. Bạn có thể định tuyến đến một nhóm như vậy bằng cách sử dụng khối
get '/patients/:id', to: 'patients#show', as: 'patient'
91

get '/patients/:id', to: 'patients#show', as: 'patient'
0Bản sao

Điều này sẽ tạo một số tuyến đường cho từng bộ điều khiển

get '/patients/:id', to: 'patients#show', as: 'patient'
92 và
get '/patients/:id', to: 'patients#show', as: 'patient'
93. Đối với
get '/patients/:id', to: 'patients#show', as: 'patient'
94, Rails sẽ tạo

HTTP VerbPathController#ActionNamed Route HelperGET/admin/articlesadmin/articles#indexadmin_articles_pathGET/admin/articles/newadmin/articles#newnew_admin_article_pathPOST/admin/articlesadmin/articles#createadmin_articles_pathGET/admin/articles/. idadmin/articles#showadmin_article_path[. id] NHẬN/quản trị viên/bài viết/. id/editadmin/articles#editedit_admin_article_path[. id]PATCH/PUT/admin/bài viết/. idadmin/articles#updateadmin_article_path[. id]XÓA/quản trị viên/bài viết/. idadmin/articles#destroyadmin_article_path[. Tôi]

Thay vào đó, nếu bạn muốn định tuyến

get '/patients/:id', to: 'patients#show', as: 'patient'
95 [không có tiền tố
get '/patients/:id', to: 'patients#show', as: 'patient'
96] đến
get '/patients/:id', to: 'patients#show', as: 'patient'
94, bạn có thể chỉ định mô-đun bằng khối
get '/patients/:id', to: 'patients#show', as: 'patient'
98

get '/patients/:id', to: 'patients#show', as: 'patient'
1Bản sao

Điều này cũng có thể được thực hiện cho một tuyến đường duy nhất

get '/patients/:id', to: 'patients#show', as: 'patient'
2Bản sao

Thay vào đó, nếu bạn muốn định tuyến

get '/patients/:id', to: 'patients#show', as: 'patient'
99 đến
@patient = Patient.find[params[:id]]
00 [không có tiền tố mô-đun
get '/patients/:id', to: 'patients#show', as: 'patient'
89], bạn có thể chỉ định đường dẫn bằng khối
get '/patients/:id', to: 'patients#show', as: 'patient'
98

get '/patients/:id', to: 'patients#show', as: 'patient'
3Bản sao

Điều này cũng có thể được thực hiện cho một tuyến đường duy nhất

get '/patients/:id', to: 'patients#show', as: 'patient'
4Bản sao

Trong cả hai trường hợp này, những người trợ giúp tuyến đường được đặt tên vẫn giữ nguyên như thể bạn không sử dụng

get '/patients/:id', to: 'patients#show', as: 'patient'
98. Trong trường hợp cuối cùng, các đường dẫn sau ánh xạ tới
@patient = Patient.find[params[:id]]
00

HTTP VerbPathController#ActionNamed Route HelperGET/admin/articlesarticles#indexarticles_pathGET/admin/articles/newarticles#newnew_article_pathPOST/admin/articlesarticles#createarticles_pathGET/admin/articles/. idarticles#showarticle_path[. id] NHẬN/quản trị viên/bài viết/. id/editarticles#editedit_article_path[. id]PATCH/PUT/admin/bài viết/. idarticles#updatearticle_path[. id]XÓA/quản trị viên/bài viết/. idarticles#destroyarticle_path[. Tôi]

Nếu bạn cần sử dụng một không gian tên bộ điều khiển khác bên trong khối

get '/patients/:id', to: 'patients#show', as: 'patient'
91, bạn có thể chỉ định đường dẫn bộ điều khiển tuyệt đối, e. g.
@patient = Patient.find[params[:id]]
06

2. 7 tài nguyên lồng nhau

Thông thường có các tài nguyên là con hợp lý của các tài nguyên khác. Ví dụ: giả sử ứng dụng của bạn bao gồm các mô hình này

get '/patients/:id', to: 'patients#show', as: 'patient'
5Bản sao

Các tuyến đường lồng nhau cho phép bạn nắm bắt mối quan hệ này trong quá trình định tuyến của mình. Trong trường hợp này, bạn có thể bao gồm khai báo tuyến đường này

get '/patients/:id', to: 'patients#show', as: 'patient'
6Bản sao

Ngoài các tuyến đường dành cho tạp chí, khai báo này cũng sẽ định tuyến quảng cáo đến một

@patient = Patient.find[params[:id]]
07. URL quảng cáo yêu cầu tạp chí

HTTP VerbPathController#ActionUsed forGET/tạp chí/. magazine_id/adsads#indexhiển thị danh sách tất cả quảng cáo cho một tạp chí cụ thểGET/magazines/. magazine_id/ads/newads#newreturn một biểu mẫu HTML để tạo quảng cáo mới thuộc một tạp chí cụ thểPOST/magazines/. magazine_id/adsads#createtạo quảng cáo mới thuộc về một tạp chí cụ thểGET/magazines/. tạp chí_id/quảng cáo/. idads#showhiển thị một quảng cáo cụ thể thuộc về một tạp chí cụ thểGET/magazines/. tạp chí_id/quảng cáo/. id/editads#editreturn biểu mẫu HTML để chỉnh sửa quảng cáo thuộc một tạp chí cụ thểPATCH/PUT/magazines/. tạp chí_id/quảng cáo/. idads#updateupdate một quảng cáo cụ thể thuộc về một tạp chí cụ thể DELETE/magazines/. tạp chí_id/quảng cáo/. idads#destroyxóa một quảng cáo cụ thể thuộc về một tạp chí cụ thể

Điều này cũng sẽ tạo các trình trợ giúp định tuyến như

@patient = Patient.find[params[:id]]
08 và
@patient = Patient.find[params[:id]]
09. Những người trợ giúp này lấy một phiên bản Tạp chí làm tham số đầu tiên [
@patient = Patient.find[params[:id]]
10]

2. 7. 1 Giới hạn đối với Nesting

Bạn có thể lồng các tài nguyên vào các tài nguyên lồng nhau khác nếu muốn. Ví dụ

get '/patients/:id', to: 'patients#show', as: 'patient'
7Bản sao

Tài nguyên được lồng sâu nhanh chóng trở nên cồng kềnh. Ví dụ, trong trường hợp này, ứng dụng sẽ nhận ra các đường dẫn như

get '/patients/:id', to: 'patients#show', as: 'patient'
8Bản sao

Trình trợ giúp định tuyến tương ứng sẽ là

@patient = Patient.find[params[:id]]
11, yêu cầu bạn chỉ định các đối tượng ở cả ba cấp độ. Thật vậy, tình huống này đủ khó hiểu đến mức một bài báo nổi tiếng của Jamis Buck đề xuất một quy tắc ngón tay cái để thiết kế Rails tốt

Tài nguyên không bao giờ được lồng sâu hơn 1 cấp

2. 7. 2 Làm Tổ Nông

Một cách để tránh lồng sâu [như đã đề xuất ở trên] là tạo các hành động bộ sưu tập nằm trong phạm vi cấp độ gốc, để hiểu được cấu trúc phân cấp, nhưng không lồng các hành động thành viên. Nói cách khác, chỉ xây dựng các tuyến đường với lượng thông tin tối thiểu để xác định duy nhất tài nguyên, như thế này

get '/patients/:id', to: 'patients#show', as: 'patient'
9Bản sao

Ý tưởng này tạo ra sự cân bằng giữa các tuyến mô tả và lồng sâu. Có tồn tại cú pháp tốc ký để đạt được điều đó, thông qua tùy chọn

@patient = Patient.find[params[:id]]
12

@patient = Patient.find[params[:id]]
0Bản sao

Điều này sẽ tạo ra các tuyến đường chính xác giống như ví dụ đầu tiên. Bạn cũng có thể chỉ định tùy chọn

@patient = Patient.find[params[:id]]
12 trong tài nguyên gốc, trong trường hợp đó, tất cả các tài nguyên lồng nhau sẽ cạn

@patient = Patient.find[params[:id]]
1Bản sao

Tài nguyên bài viết ở đây sẽ có các tuyến sau được tạo cho nó

HTTP VerbPathController#ActionNamed Route HelperGET/articles/. bài viết_id/bình luận[. định dạng]bình luận#indexarticle_comments_pathPOST/articles/. bài viết_id/bình luận[. định dạng]bình luận#createarticle_comments_pathGET/articles/. article_id/bình luận/mới[. định dạng]bình luận#newnew_article_comment_pathGET/bình luận/. id/chỉnh sửa [. định dạng]bình luận#editedit_comment_pathGET/bình luận/. Tôi[. định dạng]bình luận#showcomment_pathPATCH/PUT/bình luận/. Tôi[. định dạng]bình luận#updatecomment_pathDELETE/bình luận/. Tôi[. định dạng]bình luận#destroycomment_pathGET/articles/. bài viết_id/trích dẫn[. định dạng]quotes#indexarticle_quotes_pathPOST/articles/. bài viết_id/trích dẫn[. định dạng]quotes#createarticle_quotes_pathGET/articles/. article_id/quotes/new[. định dạng]quotes#newnew_article_quote_pathGET/quotes/. id/chỉnh sửa [. định dạng]quotes#editedit_quote_pathGET/quotes/. Tôi[. định dạng]quotes#showquote_pathPATCH/PUT/quotes/. Tôi[. định dạng]quotes#updatequote_pathDELETE/quotes/. Tôi[. định dạng]quotes#destroyquote_pathGET/articles/. article_id/bản nháp[. định dạng]bản nháp#indexarticle_drafts_pathPOST/articles/. article_id/bản nháp[. định dạng]bản thảo#createarticle_drafts_pathGET/articles/. article_id/bản nháp/mới[. format]drafts#newnew_article_draft_pathGET/drafts/. id/chỉnh sửa [. format]drafts#editedit_draft_pathGET/drafts/. Tôi[. định dạng]bản nháp#showdraft_pathPATCH/PUT/bản nháp/. Tôi[. format]drafts#updatedraft_pathDELETE/drafts/. Tôi[. định dạng]bản nháp#destroydraft_pathGET/bài viết[. định dạng]articles#indexarticles_pathPOST/articles[. định dạng]articles#createarticles_pathGET/articles/new[. định dạng]bài viết#newnew_article_pathGET/articles/. id/chỉnh sửa [. định dạng]bài viết#editedit_article_pathGET/articles/. Tôi[. định dạng]bài viết#showarticle_pathPATCH/PUT/bài viết/. Tôi[. định dạng]articles#updatearticle_pathDELETE/articles/. Tôi[. định dạng]bài viết#destroyarticle_path

Phương pháp

@patient = Patient.find[params[:id]]
14 của DSL tạo ra một phạm vi bên trong mà mọi lồng đều nông. Điều này tạo ra các tuyến đường giống như ví dụ trước

@patient = Patient.find[params[:id]]
2Bản sao

Có hai tùy chọn cho

get '/patients/:id', to: 'patients#show', as: 'patient'
98 để tùy chỉnh các tuyến đường cạn.
@patient = Patient.find[params[:id]]
16 tiền tố đường dẫn thành viên với tham số được chỉ định

@patient = Patient.find[params[:id]]
3Bản sao

Tài nguyên nhận xét ở đây sẽ có các tuyến sau được tạo cho nó

HTTP VerbPathController#ActionNamed Route HelperGET/articles/. bài viết_id/bình luận[. định dạng]bình luận#indexarticle_comments_pathPOST/articles/. bài viết_id/bình luận[. định dạng]bình luận#createarticle_comments_pathGET/articles/. article_id/bình luận/mới[. định dạng]bình luận#newnew_article_comment_pathGET/sekret/comments/. id/chỉnh sửa [. định dạng]bình luận#editedit_comment_pathGET/sekret/comments/. Tôi[. định dạng]bình luận#showcomment_pathPATCH/PUT/sekret/bình luận/. Tôi[. định dạng]bình luận#updatecomment_pathDELETE/sekret/comments/. Tôi[. định dạng]bình luận#destroycomment_path

Tùy chọn

@patient = Patient.find[params[:id]]
17 thêm tham số đã chỉ định vào trình trợ giúp tuyến đường được đặt tên

@patient = Patient.find[params[:id]]
4Bản sao

Tài nguyên nhận xét ở đây sẽ có các tuyến sau được tạo cho nó

HTTP VerbPathController#ActionNamed Route HelperGET/articles/. bài viết_id/bình luận[. định dạng]bình luận#indexarticle_comments_pathPOST/articles/. bài viết_id/bình luận[. định dạng]bình luận#createarticle_comments_pathGET/articles/. article_id/bình luận/mới[. định dạng]bình luận#newnew_article_comment_pathGET/bình luận/. id/chỉnh sửa [. định dạng]bình luận#editedit_sekret_comment_pathGET/bình luận/. Tôi[. định dạng]bình luận#showsekret_comment_pathPATCH/PUT/bình luận/. Tôi[. format]comments#updatesekret_comment_pathDELETE/comments/. Tôi[. định dạng]bình luận#destroysekret_comment_path

2. 8 mối quan tâm về định tuyến

Mối quan tâm về định tuyến cho phép bạn khai báo các tuyến phổ biến có thể được sử dụng lại bên trong các tài nguyên và tuyến khác. Để xác định mối quan tâm, hãy sử dụng khối

@patient = Patient.find[params[:id]]
18

@patient = Patient.find[params[:id]]
5Bản sao

Những mối quan tâm này có thể được sử dụng trong các tài nguyên để tránh trùng lặp mã và chia sẻ hành vi trên các tuyến

@patient = Patient.find[params[:id]]
6Bản sao

Ở trên là tương đương với

@patient = Patient.find[params[:id]]
7Bản sao

Bạn cũng có thể sử dụng chúng ở bất cứ đâu bằng cách gọi tới số

@patient = Patient.find[params[:id]]
19. Ví dụ: trong khối
get '/patients/:id', to: 'patients#show', as: 'patient'
98 hoặc
get '/patients/:id', to: 'patients#show', as: 'patient'
91

@patient = Patient.find[params[:id]]
8Bản sao

2. 9 Tạo đường dẫn và URL từ các đối tượng

Ngoài việc sử dụng trình trợ giúp định tuyến, Rails cũng có thể tạo đường dẫn và URL từ một mảng tham số. Ví dụ: giả sử bạn có tập hợp các tuyến đường này

get '/patients/:id', to: 'patients#show', as: 'patient'
6Bản sao

Khi sử dụng

@patient = Patient.find[params[:id]]
22, bạn có thể chuyển các trường hợp của
@patient = Patient.find[params[:id]]
23 và
@patient = Patient.find[params[:id]]
24 thay vì ID số


0Bản sao

Bạn cũng có thể sử dụng

@patient = Patient.find[params[:id]]
25 với một tập hợp các đối tượng và Rails sẽ tự động xác định tuyến đường bạn muốn


1Bản sao

Trong trường hợp này, Rails sẽ thấy rằng

@patient = Patient.find[params[:id]]
26 là một
@patient = Patient.find[params[:id]]
23 và
@patient = Patient.find[params[:id]]
28 là một
@patient = Patient.find[params[:id]]
24 và do đó sẽ sử dụng trình trợ giúp
@patient = Patient.find[params[:id]]
22. Trong những người trợ giúp như
@patient = Patient.find[params[:id]]
31, bạn chỉ có thể chỉ định đối tượng thay cho cuộc gọi đầy đủ
@patient = Patient.find[params[:id]]
25


2Bản sao

Nếu bạn chỉ muốn liên kết đến một tạp chí


3Bản sao

Đối với các hành động khác, bạn chỉ cần chèn tên hành động làm phần tử đầu tiên của mảng


4Bản sao

Điều này cho phép bạn xử lý các phiên bản mô hình của mình dưới dạng URL và là một lợi thế chính khi sử dụng kiểu tháo vát

2. 10 Thêm nhiều hành động RESTful

Bạn không bị giới hạn trong bảy tuyến mà định tuyến RESTful tạo theo mặc định. Nếu muốn, bạn có thể thêm các tuyến bổ sung áp dụng cho bộ sưu tập hoặc từng thành viên của bộ sưu tập

2. 10. 1 Thêm tuyến thành viên

Để thêm một tuyến đường thành viên, chỉ cần thêm một khối

@patient = Patient.find[params[:id]]
33 vào khối tài nguyên


5Bản sao

Điều này sẽ nhận ra

@patient = Patient.find[params[:id]]
34 bằng GET và định tuyến đến hành động
@patient = Patient.find[params[:id]]
35 của
get '/patients/:id', to: 'patients#show', as: 'patient'
79, với giá trị id tài nguyên được chuyển vào
@patient = Patient.find[params[:id]]
37. Nó cũng sẽ tạo các trình trợ giúp
@patient = Patient.find[params[:id]]
38 và
@patient = Patient.find[params[:id]]
39

Trong khối các tuyến thành viên, mỗi tên tuyến chỉ định động từ HTTP sẽ được nhận dạng. Bạn có thể sử dụng ________ 141, ________ 841, ________ 842, _______ 843 hoặc

@patient = Patient.find[params[:id]]
44 tại đây. Nếu bạn không có nhiều tuyến đường
@patient = Patient.find[params[:id]]
33, bạn cũng có thể chuyển
@patient = Patient.find[params[:id]]
46 đến một tuyến đường, loại bỏ khối


6Bản sao

Bạn có thể bỏ tùy chọn

@patient = Patient.find[params[:id]]
46, tùy chọn này sẽ tạo cùng một tuyến thành viên ngoại trừ giá trị id tài nguyên sẽ có sẵn trong
@patient = Patient.find[params[:id]]
48 thay vì
@patient = Patient.find[params[:id]]
37. Người trợ giúp định tuyến cũng sẽ được đổi tên từ
@patient = Patient.find[params[:id]]
38 và
@patient = Patient.find[params[:id]]
39 thành
@patient = Patient.find[params[:id]]
52 và
@patient = Patient.find[params[:id]]
53

2. 10. 2 Thêm tuyến thu gom

Để thêm tuyến đường vào bộ sưu tập, hãy sử dụng khối

@patient = Patient.find[params[:id]]
54


7Bản sao

Điều này sẽ cho phép Rails nhận ra các đường dẫn như

@patient = Patient.find[params[:id]]
55 với GET và định tuyến tới hành động
@patient = Patient.find[params[:id]]
56 của
get '/patients/:id', to: 'patients#show', as: 'patient'
79. Nó cũng sẽ tạo các trình trợ giúp định tuyến
@patient = Patient.find[params[:id]]
58 và
@patient = Patient.find[params[:id]]
59

Giống như với các tuyến đường thành viên, bạn có thể chuyển

@patient = Patient.find[params[:id]]
46 đến một tuyến đường


8Bản sao

Nếu bạn đang xác định các tuyến tài nguyên bổ sung có ký hiệu làm đối số vị trí đầu tiên, hãy lưu ý rằng nó không tương đương với việc sử dụng một chuỗi. Các biểu tượng suy ra các hành động của bộ điều khiển trong khi các chuỗi suy ra các đường dẫn

2. 10. 3 Thêm tuyến đường cho các hành động mới bổ sung

Để thêm một hành động mới thay thế bằng cách sử dụng phím tắt

@patient = Patient.find[params[:id]]
46


9Bản sao

Điều này sẽ cho phép Rails nhận ra các đường dẫn như

@patient = Patient.find[params[:id]]
62 bằng GET và định tuyến đến hành động
@patient = Patient.find[params[:id]]
35 của
@patient = Patient.find[params[:id]]
64. Nó cũng sẽ tạo các trình trợ giúp tuyến đường
@patient = Patient.find[params[:id]]
65 và
@patient = Patient.find[params[:id]]
66

Nếu bạn thấy mình đang thêm nhiều hành động bổ sung vào một lộ trình tháo vát, thì đã đến lúc dừng lại và tự hỏi liệu bạn có đang ngụy trang cho sự hiện diện của một nguồn lực khác không

Ngoài định tuyến tài nguyên, Rails còn hỗ trợ mạnh mẽ để định tuyến các URL tùy ý tới các hành động. Tại đây, bạn không nhận được các nhóm tuyến đường được tạo tự động bởi định tuyến tháo vát. Thay vào đó, bạn thiết lập từng tuyến đường riêng biệt trong ứng dụng của mình

Mặc dù bạn thường nên sử dụng định tuyến tháo vát nhưng vẫn có nhiều nơi mà định tuyến đơn giản hơn sẽ phù hợp hơn. Không cần phải cố gắng sắp xếp mọi phần cuối cùng của ứng dụng của bạn vào một khuôn khổ tháo vát nếu điều đó không phù hợp

Đặc biệt, định tuyến đơn giản giúp dễ dàng ánh xạ các URL cũ sang các hành động Rails mới

3. 1 tham số ràng buộc

Khi bạn thiết lập một tuyến đường thông thường, bạn cung cấp một loạt ký hiệu mà Rails ánh xạ tới các phần của yêu cầu HTTP sắp tới. Ví dụ, hãy xem xét tuyến đường này

get '/patients/:id', to: 'patients#show', as: 'patient'
20Bản sao

Nếu một yêu cầu đến của

@patient = Patient.find[params[:id]]
67 được xử lý theo tuyến này [vì nó không khớp với bất kỳ tuyến nào trước đó trong tệp], thì kết quả sẽ là gọi hành động
@patient = Patient.find[params[:id]]
68 của
get '/patients/:id', to: 'patients#show', as: 'patient'
79 và để cung cấp tham số cuối cùng
@patient = Patient.find[params[:id]]
70 dưới dạng
@patient = Patient.find[params[:id]]
37. Tuyến này cũng sẽ định tuyến yêu cầu đến của
get '/patients/:id', to: 'patients#show', as: 'patient'
46 đến
@patient = Patient.find[params[:id]]
73, vì
@patient = Patient.find[params[:id]]
74 là tham số tùy chọn, được biểu thị bằng dấu ngoặc đơn

3. 2 phân đoạn động

Bạn có thể thiết lập bao nhiêu phân đoạn động trong một tuyến đường thông thường tùy thích. Bất kỳ phân đoạn nào cũng sẽ có sẵn cho hành động như một phần của

get '/patients/:id', to: 'patients#show', as: 'patient'
13. Nếu bạn thiết lập tuyến đường này

get '/patients/:id', to: 'patients#show', as: 'patient'
21Bản sao

Một đường dẫn đến của

@patient = Patient.find[params[:id]]
76 sẽ được gửi đến hành động
get '/patients/:id', to: 'patients#show', as: 'patient'
11 của
get '/patients/:id', to: 'patients#show', as: 'patient'
79.
@patient = Patient.find[params[:id]]
37 sẽ là
@patient = Patient.find[params[:id]]
70 và
@patient = Patient.find[params[:id]]
81 sẽ là
@patient = Patient.find[params[:id]]
82

Theo mặc định, phân đoạn động không chấp nhận dấu chấm - điều này là do dấu chấm được sử dụng làm dấu phân cách cho các tuyến đường được định dạng. Nếu bạn cần sử dụng dấu chấm trong phân đoạn động, hãy thêm ràng buộc ghi đè điều này – ví dụ:

@patient = Patient.find[params[:id]]
83 cho phép mọi thứ trừ dấu gạch chéo

3. 3 đoạn tĩnh

Bạn có thể chỉ định các phân đoạn tĩnh khi tạo một tuyến đường bằng cách không thêm dấu hai chấm vào một phân đoạn

get '/patients/:id', to: 'patients#show', as: 'patient'
22Bản sao

Tuyến đường này sẽ phản hồi các đường dẫn như

@patient = Patient.find[params[:id]]
84. Trong trường hợp này,
get '/patients/:id', to: 'patients#show', as: 'patient'
13 sẽ là
@patient = Patient.find[params[:id]]
86

3. 4 Chuỗi truy vấn

get '/patients/:id', to: 'patients#show', as: 'patient'
13 cũng sẽ bao gồm bất kỳ tham số nào từ chuỗi truy vấn. Ví dụ, với tuyến đường này

get '/patients/:id', to: 'patients#show', as: 'patient'
23Bản sao

Đường dẫn đến của

@patient = Patient.find[params[:id]]
88 sẽ được gửi đến hành động
get '/patients/:id', to: 'patients#show', as: 'patient'
11 của bộ điều khiển
get '/patients/:id', to: 'patients#show', as: 'patient'
36.
get '/patients/:id', to: 'patients#show', as: 'patient'
13 sẽ là
@patient = Patient.find[params[:id]]
86

3. 5 Xác định giá trị mặc định

Bạn có thể xác định giá trị mặc định trong một tuyến đường bằng cách cung cấp hàm băm cho tùy chọn

@patient = Patient.find[params[:id]]
93. Điều này thậm chí áp dụng cho các thông số mà bạn không chỉ định là phân đoạn động. Ví dụ

get '/patients/:id', to: 'patients#show', as: 'patient'
24Bản sao

Rails sẽ khớp

@patient = Patient.find[params[:id]]
94 với hành động
get '/patients/:id', to: 'patients#show', as: 'patient'
11 của
get '/patients/:id', to: 'patients#show', as: 'patient'
79 và đặt
@patient = Patient.find[params[:id]]
97 thành
@patient = Patient.find[params[:id]]
98

Bạn cũng có thể sử dụng khối

@patient = Patient.find[params[:id]]
99 để xác định giá trị mặc định cho nhiều mục

get '/patients/:id', to: 'patients#show', as: 'patient'
25Bản sao

Bạn không thể ghi đè giá trị mặc định thông qua các tham số truy vấn - điều này là vì lý do bảo mật. Các giá trị mặc định duy nhất có thể bị ghi đè là các phân đoạn động thông qua thay thế trong đường dẫn URL

3. 6 tuyến đường đặt tên

Bạn có thể chỉ định tên cho bất kỳ tuyến đường nào bằng tùy chọn


00

get '/patients/:id', to: 'patients#show', as: 'patient'
26Bản sao

Điều này sẽ tạo ra


01 và

02 như những người trợ giúp định tuyến được đặt tên trong ứng dụng của bạn. Gọi

01 sẽ trả về

04

Bạn cũng có thể sử dụng điều này để ghi đè các phương thức định tuyến được xác định bởi tài nguyên bằng cách đặt các tuyến tùy chỉnh trước khi tài nguyên được xác định, như thế này

get '/patients/:id', to: 'patients#show', as: 'patient'
27Bản sao

Điều này sẽ xác định một phương thức


05 sẽ có sẵn trong bộ điều khiển, trình trợ giúp và chế độ xem sẽ đi đến một tuyến đường chẳng hạn như

06. Bên trong hành động
get '/patients/:id', to: 'patients#show', as: 'patient'
11 của

08,

09 sẽ chứa tên người dùng cho người dùng. Thay đổi

10 trong định nghĩa tuyến đường nếu bạn không muốn tên tham số của mình là

10

3. 7 ràng buộc động từ HTTP

Nói chung, bạn nên sử dụng các phương pháp ________ 141, ________ 843, ________ 842, _______ 841 và

@patient = Patient.find[params[:id]]
44 để hạn chế lộ trình đến một động từ cụ thể. Bạn có thể sử dụng phương thức

17 với tùy chọn

18 để ghép nhiều động từ cùng một lúc

get '/patients/:id', to: 'patients#show', as: 'patient'
28Bản sao

Bạn có thể nối tất cả các động từ với một lộ trình cụ thể bằng cách sử dụng


19

get '/patients/:id', to: 'patients#show', as: 'patient'
29Bản sao

Định tuyến cả yêu cầu

get '/patients/:id', to: 'patients#show', as: 'patient'
27 và
get '/patients/:id', to: 'patients#show', as: 'patient'
28 cho một hành động có ý nghĩa bảo mật. Nói chung, bạn nên tránh chuyển tất cả các động từ thành một hành động trừ khi bạn có lý do chính đáng để

get '/patients/:id', to: 'patients#show', as: 'patient'
27 trong Rails sẽ không kiểm tra mã thông báo CSRF. Bạn không bao giờ được ghi vào cơ sở dữ liệu từ yêu cầu
get '/patients/:id', to: 'patients#show', as: 'patient'
27, để biết thêm thông tin, hãy xem hướng dẫn bảo mật về các biện pháp đối phó CSRF

3. 8 ràng buộc phân đoạn

Bạn có thể sử dụng tùy chọn


24 để thực thi định dạng cho phân đoạn động

get '/patients/:id', to: 'patients#show', as: 'patient'
50Bản sao

Lộ trình này sẽ khớp với các đường dẫn như


25, nhưng không khớp với

26. Bạn có thể diễn đạt ngắn gọn hơn cùng một lộ trình theo cách này

get '/patients/:id', to: 'patients#show', as: 'patient'
51Bản sao


24 sử dụng các biểu thức chính quy với hạn chế là không thể sử dụng các ký tự biểu thức chính quy. Ví dụ: tuyến đường sau sẽ không hoạt động

get '/patients/:id', to: 'patients#show', as: 'patient'
52Bản sao

Tuy nhiên, lưu ý rằng bạn không cần sử dụng neo vì tất cả các tuyến đều được neo ở đầu và cuối

Ví dụ: các route sau sẽ cho phép

get '/patients/:id', to: 'patients#show', as: 'patient'
92 với các giá trị

29 như

30 luôn bắt đầu bằng một số và

31 với các giá trị

29 như

33 không bao giờ bắt đầu bằng một số để chia sẻ không gian tên gốc

get '/patients/:id', to: 'patients#show', as: 'patient'
53Bản sao

3. 9 ràng buộc dựa trên yêu cầu

Bạn cũng có thể hạn chế một tuyến đường dựa trên bất kỳ phương thức nào trên đối tượng Yêu cầu trả về một

get '/patients/:id', to: 'patients#show', as: 'patient'
64

Bạn chỉ định ràng buộc dựa trên yêu cầu giống như cách bạn chỉ định ràng buộc phân đoạn

get '/patients/:id', to: 'patients#show', as: 'patient'
54Bản sao

Bạn cũng có thể chỉ định các ràng buộc bằng cách sử dụng khối


35

get '/patients/:id', to: 'patients#show', as: 'patient'
55Bản sao

Các ràng buộc yêu cầu hoạt động bằng cách gọi một phương thức trên đối tượng Yêu cầu có cùng tên với khóa băm và sau đó so sánh giá trị trả về với giá trị băm. Do đó, các giá trị ràng buộc phải khớp với kiểu trả về của phương thức đối tượng Yêu cầu tương ứng. Ví dụ.


36 sẽ khớp với tên miền phụ

37 như mong đợi. Tuy nhiên, sử dụng ký hiệu

38 thì không, vì

39 trả về

40 dưới dạng Chuỗi

Có một ngoại lệ cho ràng buộc


41. trong khi đó là một phương thức trên đối tượng Yêu cầu, nó cũng là một tham số tùy chọn ẩn trên mọi đường dẫn. Các ràng buộc phân đoạn được ưu tiên và ràng buộc

41 chỉ được áp dụng như vậy khi được thực thi thông qua hàm băm. Ví dụ:

43 sẽ khớp với

44 vì định dạng là tùy chọn theo mặc định. Tuy nhiên, bạn có thể sử dụng lambda như trong

45 và tuyến đường sẽ chỉ khớp với các yêu cầu JSON rõ ràng

3. 10 ràng buộc nâng cao

Nếu bạn có ràng buộc nâng cao hơn, bạn có thể cung cấp một đối tượng đáp ứng


46 mà Rails nên sử dụng. Giả sử bạn muốn định tuyến tất cả người dùng trong danh sách hạn chế tới

47. bạn có thể làm

get '/patients/:id', to: 'patients#show', as: 'patient'
56Bản sao

Bạn cũng có thể chỉ định các ràng buộc dưới dạng lambda

get '/patients/:id', to: 'patients#show', as: 'patient'
57Bản sao

Cả phương thức


46 và lambda đều lấy đối tượng

49 làm đối số

3. 10. 1 Các ràng buộc ở dạng khối

Bạn có thể chỉ định các ràng buộc ở dạng khối. Điều này hữu ích khi bạn cần áp dụng cùng một quy tắc cho một số tuyến đường. Ví dụ

get '/patients/:id', to: 'patients#show', as: 'patient'
58Bản sao

Bạn cũng có thể sử dụng một


50

get '/patients/:id', to: 'patients#show', as: 'patient'
59Bản sao

3. 11 Route Globling và Wildcard Segments

Toàn cầu hóa tuyến đường là một cách để chỉ định rằng một tham số cụ thể phải được khớp với tất cả các phần còn lại của tuyến đường. Ví dụ

get '/patients/:id', to: 'patients#show', as: 'patient'
60Bản sao

Lộ trình này sẽ khớp với

@patient = Patient.find[params[:id]]
94 hoặc

52, đặt

53 thành

54 hoặc

55. Các phân đoạn có tiền tố là một ngôi sao được gọi là "phân đoạn ký tự đại diện"

Các đoạn ký tự đại diện có thể xảy ra ở bất kỳ đâu trong một tuyến đường. Ví dụ

get '/patients/:id', to: 'patients#show', as: 'patient'
61Bản sao

sẽ khớp với


56 với ________ 957 bằng với ________ 958 và ________ 959 bằng với ________ 960

Về mặt kỹ thuật, một tuyến đường thậm chí có thể có nhiều hơn một đoạn ký tự đại diện. Trình so khớp gán các phân đoạn cho các tham số theo cách trực quan. Ví dụ

get '/patients/:id', to: 'patients#show', as: 'patient'
62Bản sao

sẽ khớp với


61 với ________ 962 bằng với ________ 963 và ________ 964 bằng với ________ 965

Bằng cách yêu cầu


66,

67 của bạn sẽ bằng với

68 với định dạng yêu cầu là JSON. Nếu bạn muốn 3 cái cũ. 0. x trở lại, bạn có thể cung cấp

69 như thế này

get '/patients/:id', to: 'patients#show', as: 'patient'
63Bản sao

Nếu bạn muốn bắt buộc phân đoạn định dạng để không thể bỏ qua nó, bạn có thể cung cấp


70 như thế này

get '/patients/:id', to: 'patients#show', as: 'patient'
64Bản sao

3. 12 chuyển hướng

Bạn có thể chuyển hướng bất kỳ đường dẫn nào sang đường dẫn khác bằng cách sử dụng trình trợ giúp


71 trong bộ định tuyến của mình

get '/patients/:id', to: 'patients#show', as: 'patient'
65Bản sao

Bạn cũng có thể sử dụng lại các phân đoạn động từ đối sánh trong đường dẫn để chuyển hướng đến

get '/patients/:id', to: 'patients#show', as: 'patient'
66Bản sao

Bạn cũng có thể cung cấp một khối cho


71, nhận các tham số đường dẫn được ký hiệu và đối tượng yêu cầu

get '/patients/:id', to: 'patients#show', as: 'patient'
67Bản sao

Xin lưu ý rằng chuyển hướng mặc định là chuyển hướng 301 "Đã di chuyển vĩnh viễn". Hãy nhớ rằng một số trình duyệt web hoặc máy chủ proxy sẽ lưu trữ loại chuyển hướng này, khiến trang cũ không thể truy cập được. Bạn có thể sử dụng tùy chọn


73 để thay đổi trạng thái phản hồi

get '/patients/:id', to: 'patients#show', as: 'patient'
68Bản sao

Trong tất cả các trường hợp này, nếu bạn không cung cấp máy chủ lưu trữ hàng đầu [


74], Rails sẽ lấy những chi tiết đó từ yêu cầu hiện tại

Thay vì Chuỗi như


75, tương ứng với hành động
get '/patients/:id', to: 'patients#show', as: 'patient'
20 trong
@patient = Patient.find[params[:id]]
00, bạn có thể chỉ định bất kỳ ứng dụng Rack nào làm điểm cuối cho bộ so khớp

get '/patients/:id', to: 'patients#show', as: 'patient'
69Bản sao

Miễn là


78 trả lời

79 và trả về một

80, bộ định tuyến sẽ không biết sự khác biệt giữa ứng dụng Rack và một hành động. Đây là cách sử dụng phù hợp của

19, vì bạn sẽ muốn cho phép ứng dụng Rack của mình xử lý tất cả các động từ khi nó cho là phù hợp

Đối với những người tò mò,


75 thực sự mở rộng ra thành

83, trả về một ứng dụng Rack hợp lệ

Vì procs/lambdas là các đối tượng đáp ứng với


79, nên bạn có thể triển khai các tuyến rất đơn giản [e. g. để kiểm tra sức khỏe] trực tuyến.
______985

Nếu bạn chỉ định một ứng dụng Rack làm điểm cuối cho một bộ đối sánh, hãy nhớ rằng tuyến đường sẽ không thay đổi trong ứng dụng nhận. Với lộ trình sau, ứng dụng Rack của bạn sẽ mong đợi lộ trình là

get '/patients/:id', to: 'patients#show', as: 'patient'
96

get '/patients/:id', to: 'patients#show', as: 'patient'
10Bản sao

Thay vào đó, nếu bạn muốn ứng dụng Rack của mình nhận các yêu cầu tại đường dẫn gốc, hãy sử dụng


87

get '/patients/:id', to: 'patients#show', as: 'patient'
11Bản sao

3. 14 Sử dụng

88

Bạn có thể chỉ định Rails nên định tuyến


89 đến đâu bằng phương thức

88

get '/patients/:id', to: 'patients#show', as: 'patient'
12Bản sao

Bạn nên đặt tuyến đường


88 ở đầu tệp, vì đó là tuyến đường phổ biến nhất và nên được khớp trước

Tuyến đường ________ 988 chỉ tuyến đường ________ 127 yêu cầu hành động

Bạn cũng có thể sử dụng gốc bên trong không gian tên và phạm vi. Ví dụ

get '/patients/:id', to: 'patients#show', as: 'patient'
13Bản sao

3. 15 tuyến ký tự Unicode

Bạn có thể chỉ định tuyến ký tự unicode trực tiếp. Ví dụ

get '/patients/:id', to: 'patients#show', as: 'patient'
14Bản sao

3. 16 tuyến đường trực tiếp

Bạn có thể trực tiếp tạo các trình trợ giúp URL tùy chỉnh bằng cách gọi tới số


94. Ví dụ

get '/patients/:id', to: 'patients#show', as: 'patient'
15Bản sao

Giá trị trả về của khối phải là đối số hợp lệ cho phương thức

@patient = Patient.find[params[:id]]
25. Vì vậy, bạn có thể chuyển một URL chuỗi hợp lệ, Băm, Mảng, một thể hiện Mô hình Hoạt động hoặc một lớp Mô hình Hoạt động

get '/patients/:id', to: 'patients#show', as: 'patient'
16Bản sao

3. 17 Sử dụng
get '/patients/:id', to: 'patients#show', as: 'patient'
86

Phương pháp

get '/patients/:id', to: 'patients#show', as: 'patient'
86 cho phép tùy chỉnh ánh xạ đa hình của các mô hình. Ví dụ

get '/patients/:id', to: 'patients#show', as: 'patient'
17Bản sao

get '/patients/:id', to: 'patients#show', as: 'patient'
18Bản sao

Điều này sẽ tạo ra URL số ít


98 thay vì

99 thông thường

Mặc dù các tuyến đường và trình trợ giúp mặc định được tạo bởi

get '/patients/:id', to: 'patients#show', as: 'patient'
19 thường sẽ phục vụ tốt cho bạn, nhưng bạn có thể muốn tùy chỉnh chúng theo một cách nào đó. Rails cho phép bạn tùy chỉnh hầu như bất kỳ phần chung nào của trình trợ giúp tháo vát

4. 1 Chỉ định Bộ điều khiển để Sử dụng

Tùy chọn

get '/patients/:id', to: 'patients#show', as: 'patient'
201 cho phép bạn chỉ định rõ ràng bộ điều khiển sẽ sử dụng cho tài nguyên. Ví dụ

get '/patients/:id', to: 'patients#show', as: 'patient'
19Bản sao

sẽ nhận ra các đường dẫn đến bắt đầu bằng tuyến xe buýt ________ 146 đến bộ điều khiển ________ 1203

HTTP VerbPathController#ActionNamed Route HelperGET/photosimages#indexphotos_pathGET/photos/newimages#newnew_photo_pathPOST/photosimages#createphotos_pathGET/photos/. idimages#showphoto_path[. id]NHẬN/ảnh/. id/editimages#editedit_photo_path[. id]PATCH/PUT/ảnh/. idimages#updatephoto_path[. id]XÓA/ảnh/. idimages#destroyphoto_path[. Tôi]

Sử dụng

get '/patients/:id', to: 'patients#show', as: 'patient'
45,
get '/patients/:id', to: 'patients#show', as: 'patient'
47, v.v. để tạo đường dẫn cho tài nguyên này

Đối với các bộ điều khiển được đặt tên, bạn có thể sử dụng ký hiệu thư mục. Ví dụ

get '/patients/:id', to: 'patients#show', as: 'patient'
20Bản sao

Điều này sẽ định tuyến đến bộ điều khiển

get '/patients/:id', to: 'patients#show', as: 'patient'
206

Chỉ ký hiệu thư mục được hỗ trợ. Chỉ định bộ điều khiển với ký hiệu hằng số Ruby [e. g.

get '/patients/:id', to: 'patients#show', as: 'patient'
207] có thể dẫn đến sự cố định tuyến và dẫn đến cảnh báo

4. 2 Chỉ định ràng buộc

Bạn có thể sử dụng tùy chọn


24 để chỉ định định dạng bắt buộc trên
get '/patients/:id', to: 'patients#show', as: 'patient'
209 ngầm định. Ví dụ

get '/patients/:id', to: 'patients#show', as: 'patient'
21Bản sao

Tuyên bố này ràng buộc tham số

@patient = Patient.find[params[:id]]
74 khớp với biểu thức chính quy được cung cấp. Vì vậy, trong trường hợp này, bộ định tuyến sẽ không khớp với
@patient = Patient.find[params[:id]]
67 với tuyến đường này nữa. Thay vào đó,
get '/patients/:id', to: 'patients#show', as: 'patient'
212 sẽ khớp với

Bạn có thể chỉ định một ràng buộc duy nhất để áp dụng cho một số tuyến đường bằng cách sử dụng biểu mẫu khối

get '/patients/:id', to: 'patients#show', as: 'patient'
22Bản sao

Tất nhiên, bạn có thể sử dụng các ràng buộc nâng cao hơn có sẵn trong các tuyến không tháo vát trong ngữ cảnh này

Theo mặc định, tham số

@patient = Patient.find[params[:id]]
74 không chấp nhận dấu chấm - điều này là do dấu chấm được sử dụng làm dấu phân cách cho các tuyến đường được định dạng. Nếu bạn cần sử dụng dấu chấm trong
@patient = Patient.find[params[:id]]
74, hãy thêm một ràng buộc ghi đè điều này - ví dụ:
@patient = Patient.find[params[:id]]
83 cho phép mọi thứ trừ dấu gạch chéo

4. 3 Ghi đè Trình trợ giúp định tuyến được đặt tên

Tùy chọn


00 cho phép bạn ghi đè cách đặt tên bình thường cho những người trợ giúp tuyến đường được đặt tên. Ví dụ

get '/patients/:id', to: 'patients#show', as: 'patient'
23Bản sao

sẽ nhận ra các đường dẫn đến bắt đầu bằng

get '/patients/:id', to: 'patients#show', as: 'patient'
46 và định tuyến các yêu cầu tới
get '/patients/:id', to: 'patients#show', as: 'patient'
79, nhưng sử dụng giá trị của tùy chọn

00 để đặt tên cho người trợ giúp

HTTP VerbPathController#ActionNamed Route HelperGET/photosphotos#indeximages_pathGET/photos/newphotos#newnew_image_pathPOST/photosphotos#createimages_pathGET/photos/. idphotos#showimage_path[. id]NHẬN/ảnh/. id/editphotos#editedit_image_path[. id]PATCH/PUT/ảnh/. idphotos#updateimage_path[. id]XÓA/ảnh/. idphotos#destroyimage_path[. Tôi]

4. 4 Ghi đè Phân đoạn
get '/patients/:id', to: 'patients#show', as: 'patient'
22 và
get '/patients/:id', to: 'patients#show', as: 'patient'
23

Tùy chọn

get '/patients/:id', to: 'patients#show', as: 'patient'
222 cho phép bạn ghi đè các phân đoạn
get '/patients/:id', to: 'patients#show', as: 'patient'
22 và
get '/patients/:id', to: 'patients#show', as: 'patient'
23 được tạo tự động trong đường dẫn

get '/patients/:id', to: 'patients#show', as: 'patient'
24Bản sao

Điều này sẽ khiến việc định tuyến nhận ra các đường dẫn như

get '/patients/:id', to: 'patients#show', as: 'patient'
25Bản sao

Tên hành động thực tế không bị thay đổi bởi tùy chọn này. Hai đường dẫn được hiển thị sẽ vẫn định tuyến đến các hành động

get '/patients/:id', to: 'patients#show', as: 'patient'
22 và
get '/patients/:id', to: 'patients#show', as: 'patient'
23

Nếu bạn thấy mình muốn thay đổi tùy chọn này một cách thống nhất cho tất cả các tuyến đường của mình, bạn có thể sử dụng một phạm vi, như bên dưới

get '/patients/:id', to: 'patients#show', as: 'patient'
26Bản sao

4. 5 Tiền tố cho Trình trợ giúp định tuyến được đặt tên

Bạn có thể sử dụng tùy chọn


00 để đặt tiền tố cho các trình trợ giúp định tuyến được đặt tên mà Rails tạo cho một tuyến đường. Sử dụng tùy chọn này để ngăn xung đột tên giữa các tuyến sử dụng phạm vi đường dẫn. Ví dụ

get '/patients/:id', to: 'patients#show', as: 'patient'
27Bản sao

Điều này sẽ cung cấp những người trợ giúp định tuyến như

get '/patients/:id', to: 'patients#show', as: 'patient'
228,
get '/patients/:id', to: 'patients#show', as: 'patient'
229, v.v.

Để thêm tiền tố vào một nhóm người trợ giúp định tuyến, hãy sử dụng


00 với
get '/patients/:id', to: 'patients#show', as: 'patient'
98

get '/patients/:id', to: 'patients#show', as: 'patient'
28Bản sao

Điều này sẽ tạo ra các tuyến đường như

get '/patients/:id', to: 'patients#show', as: 'patient'
228 và
get '/patients/:id', to: 'patients#show', as: 'patient'
233 ánh xạ tới
get '/patients/:id', to: 'patients#show', as: 'patient'
234 và
get '/patients/:id', to: 'patients#show', as: 'patient'
235 tương ứng

Phạm vi

get '/patients/:id', to: 'patients#show', as: 'patient'
91 sẽ tự động thêm tiền tố

00 cũng như
get '/patients/:id', to: 'patients#show', as: 'patient'
238 và
get '/patients/:id', to: 'patients#show', as: 'patient'
239

Bạn cũng có thể đặt tiền tố cho các tuyến đường có tham số được đặt tên

get '/patients/:id', to: 'patients#show', as: 'patient'
29Bản sao

Điều này sẽ cung cấp cho bạn các URL chẳng hạn như

get '/patients/:id', to: 'patients#show', as: 'patient'
240 và sẽ cho phép bạn tham chiếu phần
get '/patients/:id', to: 'patients#show', as: 'patient'
241 của đường dẫn là

09 trong bộ điều khiển, trình trợ giúp và chế độ xem

4. 6 Hạn chế các tuyến đã tạo

Theo mặc định, Rails tạo các tuyến cho bảy hành động mặc định [

get '/patients/:id', to: 'patients#show', as: 'patient'
20,
get '/patients/:id', to: 'patients#show', as: 'patient'
11,
get '/patients/:id', to: 'patients#show', as: 'patient'
22,
get '/patients/:id', to: 'patients#show', as: 'patient'
24,
get '/patients/:id', to: 'patients#show', as: 'patient'
23,
get '/patients/:id', to: 'patients#show', as: 'patient'
25 và
get '/patients/:id', to: 'patients#show', as: 'patient'
26] cho mọi tuyến RESTful trong ứng dụng của bạn. Bạn có thể sử dụng các tùy chọn
get '/patients/:id', to: 'patients#show', as: 'patient'
250 và
get '/patients/:id', to: 'patients#show', as: 'patient'
251 để tinh chỉnh hành vi này. Tùy chọn
get '/patients/:id', to: 'patients#show', as: 'patient'
250 yêu cầu Rails chỉ tạo các tuyến được chỉ định

get '/patients/:id', to: 'patients#show', as: 'patient'
30Bản sao

Bây giờ, một yêu cầu

get '/patients/:id', to: 'patients#show', as: 'patient'
27 tới
get '/patients/:id', to: 'patients#show', as: 'patient'
46 sẽ thành công, nhưng một yêu cầu
get '/patients/:id', to: 'patients#show', as: 'patient'
28 tới
get '/patients/:id', to: 'patients#show', as: 'patient'
46 [thường được chuyển đến hành động
get '/patients/:id', to: 'patients#show', as: 'patient'
24] sẽ không thành công

Tùy chọn

get '/patients/:id', to: 'patients#show', as: 'patient'
251 chỉ định một tuyến đường hoặc danh sách các tuyến đường mà Rails không nên tạo

get '/patients/:id', to: 'patients#show', as: 'patient'
31Bản sao

Trong trường hợp này, Rails sẽ tạo tất cả các route thông thường ngoại trừ route cho

get '/patients/:id', to: 'patients#show', as: 'patient'
26 [một yêu cầu của
get '/patients/:id', to: 'patients#show', as: 'patient'
31 gửi tới
get '/patients/:id', to: 'patients#show', as: 'patient'
54]

Nếu ứng dụng của bạn có nhiều tuyến RESTful, việc sử dụng

get '/patients/:id', to: 'patients#show', as: 'patient'
250 và
get '/patients/:id', to: 'patients#show', as: 'patient'
251 để chỉ tạo các tuyến mà bạn thực sự cần có thể cắt giảm việc sử dụng bộ nhớ và tăng tốc quá trình định tuyến

4. 7 đường dẫn được dịch

Sử dụng

get '/patients/:id', to: 'patients#show', as: 'patient'
98, chúng tôi có thể thay đổi tên đường dẫn được tạo bởi
get '/patients/:id', to: 'patients#show', as: 'patient'
19

get '/patients/:id', to: 'patients#show', as: 'patient'
32Bản sao

Rails hiện tạo các tuyến đến

get '/patients/:id', to: 'patients#show', as: 'patient'
266

HTTP VerbPathController#ActionNamed Route HelperGET/kategoriencategories#indexcategories_pathGET/kategorien/neucategories#newnew_category_pathPOST/kategoriencategories#createcategories_pathGET/kategorien/. idcategories#showcategory_path[. id]GET/categorien/. id/bearbeitencategories#editedit_category_path[. id]PATCH/PUT/categorien/. idcategories#updatecategory_path[. id]DELETE/categorien/. idcategories#destroycategory_path[. Tôi]

4. 8 Ghi đè dạng số ít

Nếu bạn muốn ghi đè dạng số ít của tài nguyên, bạn nên thêm các quy tắc bổ sung vào bộ lọc thông qua

get '/patients/:id', to: 'patients#show', as: 'patient'
267

get '/patients/:id', to: 'patients#show', as: 'patient'
33Bản sao

4. 9 Sử dụng

00 trong Nested Resources

Tùy chọn


00 sẽ ghi đè tên được tạo tự động cho tài nguyên trong trình trợ giúp tuyến đường lồng nhau. Ví dụ

get '/patients/:id', to: 'patients#show', as: 'patient'
34Bản sao

Điều này sẽ tạo ra các trình trợ giúp định tuyến như

get '/patients/:id', to: 'patients#show', as: 'patient'
270 và
get '/patients/:id', to: 'patients#show', as: 'patient'
271

4. 10 Ghi đè các tham số tuyến đường được đặt tên

Tùy chọn

get '/patients/:id', to: 'patients#show', as: 'patient'
272 ghi đè mã định danh tài nguyên mặc định
@patient = Patient.find[params[:id]]
74 [tên của phân đoạn động được sử dụng để tạo tuyến đường]. Bạn có thể truy cập phân đoạn đó từ bộ điều khiển của mình bằng cách sử dụng
get '/patients/:id', to: 'patients#show', as: 'patient'
274

get '/patients/:id', to: 'patients#show', as: 'patient'
35Bản sao

get '/patients/:id', to: 'patients#show', as: 'patient'
36Bản sao

get '/patients/:id', to: 'patients#show', as: 'patient'
37Bản sao

Bạn có thể ghi đè

get '/patients/:id', to: 'patients#show', as: 'patient'
275 của mô hình được liên kết để tạo URL

get '/patients/:id', to: 'patients#show', as: 'patient'
38Bản sao

get '/patients/:id', to: 'patients#show', as: 'patient'
39Bản sao

Nếu bạn làm việc trong một ứng dụng lớn với hàng nghìn tuyến đường, một tệp

get '/patients/:id', to: 'patients#show', as: 'patient'
17 đơn lẻ có thể trở nên cồng kềnh và khó đọc

Rails cung cấp một cách để chia nhỏ một tệp

get '/patients/:id', to: 'patients#show', as: 'patient'
277 khổng lồ thành nhiều tệp nhỏ bằng cách sử dụng macro
get '/patients/:id', to: 'patients#show', as: 'patient'
278

Bạn có thể có một tuyến đường

get '/patients/:id', to: 'patients#show', as: 'patient'
279 chứa tất cả các tuyến đường cho khu vực quản trị, một tệp
get '/patients/:id', to: 'patients#show', as: 'patient'
280 khác cho các tài nguyên liên quan đến API, v.v.

get '/patients/:id', to: 'patients#show', as: 'patient'
00Bản sao

get '/patients/:id', to: 'patients#show', as: 'patient'
01Bản sao

Việc gọi

get '/patients/:id', to: 'patients#show', as: 'patient'
281 bên trong khối
get '/patients/:id', to: 'patients#show', as: 'patient'
282 sẽ cố tải tệp tuyến đường có cùng tên với đối số đã cho [
get '/patients/:id', to: 'patients#show', as: 'patient'
279 trong ví dụ này]. Tệp cần được đặt bên trong thư mục
get '/patients/:id', to: 'patients#show', as: 'patient'
284 hoặc bất kỳ thư mục con nào [i. e.
get '/patients/:id', to: 'patients#show', as: 'patient'
285 hoặc
get '/patients/:id', to: 'patients#show', as: 'patient'
286]

Bạn có thể sử dụng DSL định tuyến thông thường bên trong tệp định tuyến

get '/patients/:id', to: 'patients#show', as: 'patient'
279, nhưng bạn không nên bao quanh nó bằng khối
get '/patients/:id', to: 'patients#show', as: 'patient'
282 giống như bạn đã làm trong tệp chính
get '/patients/:id', to: 'patients#show', as: 'patient'
17

5. 1 Không sử dụng tính năng này trừ khi bạn thực sự cần

Có nhiều tệp định tuyến khiến khả năng phát hiện và hiểu khó hơn. Đối với hầu hết các ứng dụng - ngay cả những ứng dụng có vài trăm tuyến - các nhà phát triển sẽ dễ dàng có một tệp định tuyến hơn. Rails định tuyến DSL đã cung cấp một cách để ngắt các tuyến một cách có tổ chức với

get '/patients/:id', to: 'patients#show', as: 'patient'
91 và
get '/patients/:id', to: 'patients#show', as: 'patient'
98

Rails cung cấp các phương tiện để kiểm tra và thử nghiệm các tuyến đường của bạn

6. 1 Liệt kê các tuyến đường hiện có

Để có danh sách đầy đủ các tuyến có sẵn trong ứng dụng của bạn, hãy truy cập http. //máy chủ cục bộ. 3000/rails/info/routes trong trình duyệt của bạn trong khi máy chủ của bạn đang chạy trong môi trường phát triển. Bạn cũng có thể thực thi lệnh

get '/patients/:id', to: 'patients#show', as: 'patient'
292 trong thiết bị đầu cuối của mình để tạo ra kết quả tương tự

Cả hai phương pháp sẽ liệt kê tất cả các tuyến đường của bạn, theo cùng thứ tự mà chúng xuất hiện trong

get '/patients/:id', to: 'patients#show', as: 'patient'
17. Đối với mỗi tuyến đường, bạn sẽ thấy

  • Tên tuyến đường [nếu có]
  • Động từ HTTP được sử dụng [nếu tuyến đường không đáp ứng với tất cả các động từ]
  • Mẫu URL phù hợp
  • Các tham số định tuyến cho tuyến đường

Ví dụ: đây là một phần nhỏ của đầu ra

get '/patients/:id', to: 'patients#show', as: 'patient'
292 cho một tuyến RESTful

get '/patients/:id', to: 'patients#show', as: 'patient'
02Bản sao

Bạn cũng có thể sử dụng tùy chọn

get '/patients/:id', to: 'patients#show', as: 'patient'
295 để bật chế độ định dạng bảng mở rộng

get '/patients/:id', to: 'patients#show', as: 'patient'
03Bản sao

Bạn có thể tìm kiếm qua các tuyến đường của mình bằng tùy chọn grep. -g. Điều này xuất ra bất kỳ tuyến nào khớp một phần với tên phương thức của trình trợ giúp URL, động từ HTTP hoặc đường dẫn URL

get '/patients/:id', to: 'patients#show', as: 'patient'
04Bản sao

Nếu bạn chỉ muốn xem các tuyến ánh xạ tới một bộ điều khiển cụ thể, thì có tùy chọn -c

get '/patients/:id', to: 'patients#show', as: 'patient'
05Bản sao

Bạn sẽ thấy rằng đầu ra từ

get '/patients/:id', to: 'patients#show', as: 'patient'
292 dễ đọc hơn nhiều nếu bạn mở rộng cửa sổ đầu cuối của mình cho đến khi các dòng đầu ra không ngắt dòng

6. 2 tuyến đường thử nghiệm

Các tuyến nên được đưa vào chiến lược thử nghiệm của bạn [giống như phần còn lại của ứng dụng của bạn]. Rails cung cấp ba xác nhận tích hợp được thiết kế để làm cho các tuyến thử nghiệm trở nên đơn giản hơn

6. 2. 1 Khẳng định
get '/patients/:id', to: 'patients#show', as: 'patient'
297

get '/patients/:id', to: 'patients#show', as: 'patient'
297 khẳng định rằng một bộ tùy chọn cụ thể tạo ra một đường dẫn cụ thể và có thể được sử dụng với các tuyến mặc định hoặc các tuyến tùy chỉnh. Ví dụ

get '/patients/:id', to: 'patients#show', as: 'patient'
06Bản sao

6. 2. 2 Khẳng định
get '/patients/:id', to: 'patients#show', as: 'patient'
299

get '/patients/:id', to: 'patients#show', as: 'patient'
299 là nghịch đảo của
get '/patients/:id', to: 'patients#show', as: 'patient'
297. Nó khẳng định rằng một đường dẫn nhất định được nhận dạng và định tuyến nó đến một vị trí cụ thể trong ứng dụng của bạn. Ví dụ

get '/patients/:id', to: 'patients#show', as: 'patient'
07Bản sao

Bạn có thể cung cấp đối số

get '/patients/:id', to: 'patients#show', as: 'patient'
502 để chỉ định động từ HTTP

get '/patients/:id', to: 'patients#show', as: 'patient'
08Bản sao

6. 2. 3 Khẳng định
get '/patients/:id', to: 'patients#show', as: 'patient'
503

Xác nhận

get '/patients/:id', to: 'patients#show', as: 'patient'
503 kiểm tra tuyến đường theo cả hai cách. nó kiểm tra xem đường dẫn có tạo ra các tùy chọn không và các tùy chọn đó có tạo ra đường dẫn không. Do đó, nó kết hợp các chức năng của
get '/patients/:id', to: 'patients#show', as: 'patient'
297 và
get '/patients/:id', to: 'patients#show', as: 'patient'
299

get '/patients/:id', to: 'patients#show', as: 'patient'
09Bản sao

Nhận xét

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 đóng góp tài liệu 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

Chủ Đề