різниця між маршрутом збору та маршрутом члена в рубіні на рейках?


278

Яка різниця між маршрутами збору та маршрутами-членами в Rails?

Наприклад,

resources :photos do
  member do
    get :preview
  end
end

проти

resources :photos do
  collection do
    get :search
  end
end

Я не розумію.

Відповіді:


407

Для маршруту учасника потрібен ідентифікатор, оскільки він діє на члена . Маршрут збору не так, оскільки він діє на колекцію об'єктів. Попередній перегляд - приклад маршруту для учасників, оскільки він діє (і відображає) один об'єкт. Пошук - приклад маршруту збору, оскільки він діє на (і відображає) колекцію об'єктів.


А як щодо створення дії? Скажіть, я хотів зробити альтернативу "творити" - чи вважатиметься її членом?
digitalWestie

1
Так, створення - це дія учасника.
Тео

1
А як же додати "отримати" без жодного блоку? Це член або маршрут збору? Мій тест показав його колекцію, але з різною назвою змінної id.
lzap

6
Ви впевнені в створенні як учасника дії. Ідентифікаційного посвідчення немає.
Джордж Шоу

6
@YoniGeek. Неправильно. Дивіться guides.rubyonrails.org/routing.html , 2.7 Вкладені ресурси. Створення - це завжди дія колекції, коли ви додаєте її до колекції. Зауважте, що названий шлях створення завжди є множинним. У своєму прикладі ви додаєте нове голосування до колекції голосів, які належать члену повідомлення. Ідентифікатор посилається на пост учасника, а не набір голосів, що створюються. Названий шлях буде, наприклад, posts_votes_url.
Джордж Шоу

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
найцінніший пост!
aldo.roman.nurena

1
Використовувати слід search_photos_pathзамість того, search_photos_urlщоб люди не думали _pathі _urlє різницею між ними.
Джошуа Пінтер

31

Відповідь Тео правильна. Заради документації я також хотів би зазначити, що вони створюватимуть різні помічники шляху.

member {get 'preview'} створить:

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

collection {get 'search'} створить:

search_photos_path # /photos/search

Зауважте множинність!


14

1) : колекція - додайте названі маршрути для інших дій, що діють над колекцією. Займає хеш #{action} => #{method}, де метод є :get/:post/:put/:delete, масив будь-якого з попередніх, або: будь-який, якщо метод не має значення. Ці маршрути зіставляються з такою URL-адресою, як / users / customers_list , з маршрутом customers_list_users_url .

map.resources: користувачів,: collection => {: customers_list =>: get}

2) :member- Те саме :collection, але для дій, що діють на конкретному члені.

map.resources: користувачів,: member => {: неактивний =>: пост}

це трактували як /users/1;inactive=> [:action => 'inactive', :id => 1]


приємний приклад. пояснення вгорі могло бути і краще.
hitesh israni
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.