perbedaan antara rute pengumpulan dan rute anggota di ruby ​​on rails?

278

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.

never_had_a_name
sumber

Jawaban:

407

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.

Theo
sumber
Bagaimana dengan tindakan buat? Katakanlah saya ingin membuat alternatif untuk 'membuat' - apakah ini akan dianggap sebagai anggota?
digitalWestie
1
Ya, buat adalah tindakan anggota.
Theo
1
Tapi bagaimana dengan menambahkan "dapatkan" tanpa blok? Apakah itu rute anggota atau pengumpulan? Tes saya menunjukkan koleksinya tetapi dengan nama variabel id yang berbeda.
lzap
6
Yakin membuat menjadi tindakan anggota. Tidak ada ID untuk lulus.
George Shaw
6
@YoniGeek. Tidak benar. Lihat panduan.rubyonrails.org/routing.html , 2,7 Sumber Bersarang. Buat selalu merupakan tindakan koleksi saat Anda menambahkan ke koleksi. Perhatikan bahwa path buat bernama selalu jamak. Dalam contoh Anda, Anda menambahkan suara baru ke koleksi suara milik anggota posting. Id merujuk ke pos anggota, bukan kumpulan suara yang dibuat. Jalur yang dinamai adalah posts_votes_url, misalnya.
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)
Amit Patel
sumber
39
posting paling berharga!
aldo.roman.nurena
1
Harus digunakan search_photos_pathalih-alih search_photos_urlagar orang tidak akan berpikir _pathdan _urlada perbedaan di antara keduanya.
Joshua Pinter
31

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!

tybro0103
sumber
14

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]

Beena Shetty
sumber
contoh yang bagus. Penjelasan di atas bisa lebih baik.
hitesh israni