2010-06-12 62 views

Trả lời

342

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

+0

Điều gì về hành động tạo? Giả sử tôi muốn thay thế 'tạo' - liệu 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 điều gì về việc thêm "nhận" mà không có bất kỳ khối nào? Đó có phải là thành viên hoặc tuyến đường thu gom không? 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

9

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

map.resources: người dùng,: bộ sưu tập => {: customers_list =>: get}

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

map.resources: người dùng,: thành viên => {: không hoạt động =>: post}

nó đối xử như /users/1;inactive=> [:action => 'inactive', :id => 1]

+0

ví dụ hay. giải thích ở đầu có thể tốt hơn. –

25

câu trả lời Theo là đúng. Vì lợi ích của tài liệu, tôi cũng muốn lưu ý rằng cả hai sẽ tạo ra những người 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 

Note đa!

165
   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) 
+25

bài đăng có giá trị nhất! –

+0

Nên sử dụng 'search_photos_path' thay vì' search_photos_url' để mọi người sẽ không nghĩ '_path' và' _url' là sự khác biệt giữa hai. –

+1

@JoshPinter đã hoàn tất! Cảm ơn!! –

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