Apa perbedaan antara rute pengumpulan dan rute anggota di Rails?
Sebagai contoh,
resources :photos do
member do
get :preview
end
end
melawan
resources :photos do
collection do
get :search
end
end
Saya tidak mengerti.
Apa perbedaan antara rute pengumpulan dan rute anggota di Rails?
Sebagai contoh,
resources :photos do
member do
get :preview
end
end
melawan
resources :photos do
collection do
get :search
end
end
Saya tidak mengerti.
Jawaban:
Rute anggota akan memerlukan ID, karena berlaku pada anggota . Rute koleksi tidak karena itu bertindak pada kumpulan objek. Pratinjau adalah contoh rute anggota, karena ini bertindak pada (dan menampilkan) objek tunggal. Pencarian adalah contoh dari rute koleksi, karena ini bertindak pada (dan menampilkan) kumpulan objek.
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)
search_photos_path
alih-alih search_photos_url
agar orang tidak akan berpikir _path
dan _url
ada perbedaan di antara keduanya.
Jawaban Theo benar. Demi dokumentasi, saya juga ingin mencatat bahwa keduanya akan menghasilkan jalur pembantu yang berbeda.
member {get 'preview'}
akan menghasilkan:
preview_photo_path(@photo) # /photos/1/preview
collection {get 'search'}
akan menghasilkan:
search_photos_path # /photos/search
Perhatikan pluralitas!
1) : koleksi - Tambahkan rute bernama untuk tindakan lain yang beroperasi pada koleksi. Mengambil hash dari #{action} => #{method}
, di mana metode adalah :get/:post/:put/:delete
, array dari yang sebelumnya, atau: apa saja jika metode tidak masalah. Rute ini memetakan ke URL seperti / users / customers_list , dengan rute customers_list_users_url .
map.resources: pengguna,: collection => {: customers_list =>: get}
2) :member
- Sama seperti :collection
, tetapi untuk tindakan yang beroperasi pada anggota tertentu.
map.resources: pengguna,: anggota => {: tidak aktif =>: posting}
itu diperlakukan sebagai /users/1;inactive=> [:action => 'inactive', :id => 1]