sự khác biệt giữa tuyến thu gom và tuyến thành viên trong ruby ​​trên đường ray?


278

Sự khác biệt giữa các tuyến thu thập và các tuyến thành viên trong Rails là gì?

Ví dụ,

resources :photos do
  member do
    get :preview
  end
end

đấu với

resources :photos do
  collection do
    get :search
  end
end

Tôi không hiểu

Câu trả lời:


407

Một tuyến thành viên sẽ yêu cầu ID, bởi vì nó hoạt động trên một thành viên . Một lộ trình thu thập không phải vì nó hoạt động trên một bộ sưu tập các đối tượng. Xem trước là một ví dụ về tuyến đường thành viên, bởi vì nó hoạt động trên (và hiển thị) một đối tượng. Tìm kiếm là một ví dụ về tuyến đường bộ sưu tập, bởi vì nó hoạt động trên (và hiển thị) một bộ sưu tập các đối tượng.


Còn hành động tạo ra thì sao? Nói rằng tôi muốn thực hiện một thay thế cho 'tạo' - nó có được tính là thành viên không?
digitalWestie

1
Có, tạo là một hành động thành viên.
Theo

1
Nhưng những gì về việc thêm một "nhận" mà không có bất kỳ khối? Là thành viên hoặc tuyến thu? Thử nghiệm của tôi cho thấy bộ sưu tập của nó nhưng với tên biến id khác nhau.
lzap

6
Bạn có chắc chắn về việc tạo ra là một hành động thành viên. Không có ID để vượt qua.
George Shaw

6
@YoniGeek. Không chính xác. Xem hướng dẫn.rubyonrails.org/routing.html , 2.7 Tài nguyên lồng nhau. Tạo luôn là một hành động thu thập khi bạn thêm vào bộ sưu tập. Lưu ý rằng đường dẫn tạo được đặt tên luôn là số nhiều. Trong ví dụ của bạn, bạn đang thêm một phiếu bầu mới vào bộ sưu tập phiếu bầu thuộc về một thành viên của bài viết. Ví dụ, id đề cập đến bài đăng của thành viên, chứ không phải tập hợp các phiếu bầu được tạo. Ví dụ, đường dẫn được đặt tên sẽ là post_votes_url.
George Shaw

217
                URL                 Helper                      Description
----------------------------------------------------------------------------------------------------------------------------------
member          /photos/1/preview   preview_photo_path(photo)   Acts on a specific resource so required id (preview specific photo)
collection      /photos/search      search_photos_path          Acts on collection of resources(display all photos)

39
bài có giá trị nhất!
aldo.roman.nurena

1
Nên sử dụng search_photos_paththay vì search_photos_urlvậy mọi người sẽ không nghĩ _path_urllà một sự khác biệt giữa hai.
Joshua Pinter

31

Theo câu trả lời là đúng. Vì mục đích tài liệu, tôi cũng muốn lưu ý rằng cả hai sẽ tạo ra các trình trợ giúp đường dẫn khác nhau.

member {get 'preview'} sẽ tạo ra:

preview_photo_path(@photo) # /photos/1/preview

collection {get 'search'} sẽ tạo ra:

search_photos_path # /photos/search

Lưu ý số nhiều!


14

1) : bộ sưu tập - Thêm các tuyến được đặt tên cho các hành động khác hoạt động trên bộ sưu tập. Đưa ra một hàm băm #{action} => #{method}, trong đó phương thức là :get/:post/:put/:deletemột mảng của bất kỳ phương thức nào trước đó hoặc: bất kỳ nếu phương thức đó không quan trọng. Các tuyến đường này ánh xạ tới một URL như / users / customer_list , với một lộ trình của khách hàng_list_usftimeurl .

map.resource: users ,: sưu tập => {: fans_list =>: get}

2) :member- Tương tự :collection, nhưng đối với các hành động hoạt động trên một thành viên cụ thể.

map.resource: users ,: thành viên => {: không hoạt động =>: bài}

nó được coi là /users/1;inactive=> [:action => 'inactive', :id => 1]


ví dụ tốt đẹp giải thích ở đầu có thể đã được tốt hơn mặc dù.
hitesh israni
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.