raylar üzerinde toplama yolu ve üye yolu arasındaki fark?


278

Rails toplama yolları ve üye yolları arasındaki fark nedir?

Örneğin,

resources :photos do
  member do
    get :preview
  end
end

karşı

resources :photos do
  collection do
    get :search
  end
end

Anlamıyorum.

Yanıtlar:


407

Bir üye yol, bir üye üzerinde hareket ettiğinden bir kimlik gerektirir . Bir toplama yolu, bir nesne koleksiyonu üzerinde hareket ettiği için değil. Önizleme, tek bir nesneye etki ettiği (ve görüntülediği) için üye yolunun bir örneğidir. Arama bir koleksiyon rotasına örnektir, çünkü bir nesne koleksiyonuna etki eder (ve görüntüler).


Oluşturma eylemine ne dersiniz? Diyelim ki 'oluşturmak' için bir alternatif yapmak istiyorum - üye sayılır mı?
digitalWestie

1
Evet, oluşturma bir üye işlemidir.
Theo

1
Peki, herhangi bir blok olmadan bir "get" eklemeye ne dersiniz? Üye mi yoksa toplama yolu mu? Testim koleksiyonunu gösterdi ancak farklı id değişken ismiyle.
lzap

6
Üye eylemi oluşturmaktan emin misiniz? Geçilecek kimlik yok.
George Shaw

6
@YoniGeek. Doğru değil. Bkz. Guides.rubyonrails.org/routing.html , 2.7 İç İçe Kaynaklar. Koleksiyon, koleksiyona eklerken her zaman bir koleksiyon eylemidir. Adlandırılmış oluşturma yolunun her zaman çoğul olduğunu unutmayın. Örneğinizde, bir gönderi üyesine ait oy koleksiyonuna yeni bir oy ekliyorsunuz. Kimlik, oluşturulan oy topluluğuna değil, üye postasına atıfta bulunur. Belirtilen yol, örneğin posts_votes_url olur.
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
en değerli yazı!
aldo.roman.nurena

1
Bunun search_photos_pathyerine search_photos_urlinsanlar düşünmemeli _pathve _urlikisi arasında bir fark olduğunu kullanmalıdır .
Joshua Pinter

31

Theo'nun cevabı doğrudur. Dokümantasyon adına, ikisinin farklı yol yardımcıları üreteceğini de belirtmek isterim.

member {get 'preview'} üretecek:

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

collection {get 'search'} üretecek:

search_photos_path # /photos/search

Çoğulluğa dikkat edin!


14

1) : koleksiyon - Koleksiyonda çalışan diğer eylemler için adlandırılmış yollar ekleyin. #{action} => #{method}Metodun olduğu yerde :get/:post/:put/:delete, bir öncekinin herhangi bir dizisini ya da: yöntem önemli değilse herhangi bir karmasını alır . Bu rotalar, bir users_list_users_url yolu ile / users / customer_list gibi bir URL ile eşleşir .

map.resources: kullanıcılar,: koleksiyon => {: müşteriler_listesi =>: get}

2) :member- Aynı :collection, ancak belirli bir üye üzerinde işlem yapan eylemler için.

map.resources: kullanıcılar,: üye => {: etkin olmayan =>: posta}

gibi muamele /users/1;inactive=> [:action => 'inactive', :id => 1]


güzel bir örnek. üst açıklama olsa daha iyi olabilirdi.
hitesh israni
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.