2014-07-08 16 views
11

Khi chạy tuyến cào tôi thấy:cách thiết lập và sử dụng một tuyến đường Rails tiền tố

Prefix Verb URI Pattern          Controller#Action 
articles GET /articles(.:format)        articles#index 
new_article GET /articles/new(.:format)       articles#new 

cùng với một số người khác tôi rời ra.

Điều này là do tập tin routes.rb của tôi có:

resources :articles 

Câu hỏi của tôi là những gì chính xác là tiền tố này, và làm thế nào tôi sẽ thay đổi nó?

Từ sự hiểu biết của tôi nó là một phím tắt để URI, vì vậy trong ứng dụng của tôi, tôi chỉ có thể tham khảo new_article thay vì các bài báo/mới? Tôi có thực sự tham khảo @new_article hoặc có một số định dạng khác để tham chiếu đến nó hay không.

Câu hỏi thứ hai, làm thế nào để tôi sửa đó? Cho phép nói rằng tôi muốn có một tiền tố được gọi là new_document thay vì new_article để nhận được yêu cầu trên url đó. Tôi sẽ đặt gì trong tệp routes.rb của mình?

I looked at this link from the rails guides but all it seems to show is how to make the url longer by adding a prefix in front of it.

Trả lời

13

Paths

Tôi không chắc chắn lý do tại sao nó được gọi là prefix - nó nên được gọi là path helper:

enter image description here

Điểm mấu chốt là khi bạn gọi người giúp đỡ như link_to hoặc form_tag vv - họ sẽ yêu cầu paths để phổ biến các hành động khác nhau trong cấu trúc định tuyến của ứng dụng của bạn.

Như Rails ủng hộ convention over configuration & DRY programming, có nghĩa là nếu bạn có thể tham khảo các path helpers qua sử dụng tiêu chuẩn urls, nó sẽ cho phép bạn thực hiện một tài liệu tham khảo & cơ hội lộ trình theo yêu cầu

EG

Calling articles_pathxa mạnh hơn tham chiếu /articles mỗi lần


đường

Để trả lời câu hỏi của bạn đúng cách, bạn sẽ cần phải đánh giá cao Rails sử dụng resourceful routing - về cơ bản có nghĩa là mỗi route helper bạn tạo nên được xác định xung quanh bất kỳ tài nguyên trong ứng dụng của bạn

Do cấu trúc MVC của Rails, các tài nguyên này thường sẽ được xác định bởi controllers bạn sử dụng:

#config/routes.rb 
resources :articles #-> articles_path etc 

Để trả lời câu hỏi của bạn, bạn cần phải đánh giá cao rằng bạn nên luôn luôn tham khảo tài nguyên của bạn như họ đang có (trong trường hợp của bạn articles).

Để tùy chỉnh các helper đường dẫn, bạn sẽ cần phải thay đổi tài liệu tham khảo trong file tuyến đường, như thế này:

#config/routes.rb 
resources :articles, as: :document, path: "document" #-> domain.com/documents 

này cho phép bạn xác định các tuyến đường tùy chỉnh/người giúp đỡ con đường, cho phép bạn gọi như bạn muốn

11

Nó cho phép của bạn sử dụng các phím tắt như new_article_path hoặc new_article_url trong bộ điều khiển và quan điểm của bạn. Chúng rất tiện dụng khi thực hiện những việc như chuyển hướng người dùng đến một trang cụ thể hoặc tạo liên kết động.

Bạn có thể thay đổi tiền tố bằng cách thêm as: tùy chọn trong tập tin routes.rb của bạn. Ví dụ:

GET '/new', to: 'articles#new', as: 'my_new_article` 

Điều này sẽ thay đổi tiền tố thành my_new_article.

1

Tiền tố có thể được sử dụng với những người giúp đỡ route tạo tuyến đường trong ứng dụng của bạn. Vì vậy, trong ứng dụng của bạn, helper articles_path tạo ra một tuyến đường cho trang chỉ mục bài viết, new_article_path là tuyến đường cho trang bài viết mới và article_path (@article) sẽ là tuyến đường cho trang hiển thị cho @article.

Để xác định một con đường khác nhau, bạn có thể thay đổi tập tin routes.rb của bạn để:

resources :articles, as: :documents 

Điều đó sẽ cung cấp cho bạn:

documents GET /articles(.:format)        articles#index 
new_document GET /articles/new(.:format)       articles#new 

tôi có thể xem xét việc thay đổi tên tài nguyên với các tài liệu như nó có thể gây nhầm lẫn khi bạn đổi tên các tuyến đường và nhận được sự kết hợp của thuật ngữ giữa tuyến đường và bộ điều khiển.

1

Bạn có thể làm một cái gì đó như thế này:

resources :articles do 
collection do 
     get "new" => "articles#new", :as => 'new_document' 
end 
end 

và bạn có thể sử dụng nó:

link_to "New foo", new_document_path 

hoặc

link_to "New foo", new_document_url 

url in url tuyệt đối (http://server.com/controller/action) trong khi đó in đường url tương đối (/controller/action).

6

Bạn nói đúng, tiền tố được sử dụng để tạo các tuyến đường được đặt tên, do đó resources method trong tệp tuyến đường tạo các tuyến đường như articles_path, new_article_path v.v.Để tham chiếu đến tuyến đường trong mã của bạn, hãy thêm path vào tiền tố mà bạn thấy khi running rake routes.

Nếu bạn muốn thay đổi các tiền tố được tạo ra theo phương pháp nguồn lực trong tập tin tuyến đường của bạn, sử dụng :as option, như thế này:

resources :articles, as: :posts

này sẽ tạo ra các tuyến đường như 'new_post_path' mà bạn có thể sử dụng trong chế độ xem của mình.

Nếu bạn muốn thay đổi con đường của tuyến đường trong trình duyệt, bạn có thể sử dụng path tùy chọn:

resources :articles, path: :posts 

nào sẽ tạo ra các tuyến đường như /posts/1 or /posts/new thay vì /articles/1 or /articles/new, nhưng các tuyến đường vẫn sẽ được đặt tên articles_path, new_article_path vv trong mã của bạn. Bạn có thể sử dụng cả hai tùy chọn :path and :as để thay đổi cả hai path and the prefix các tuyến tài nguyên của mình.

Để thay đổi một con đường cơ bản trong tập tin tuyến đường của bạn, bạn chỉ có thể sử dụng :as, như vậy:

get 'messages' => 'messages#index', as: :inbox

Điều này sẽ tạo ra các inbox_path tuyến đường mà bạn có thể sử dụng trong mã của bạn.

Hy vọng điều đó sẽ hữu ích!

Các vấn đề liên quan