programing

철도에서 루비의 수집 경로와 회원 경로의 차이?

testmans 2023. 6. 4. 10:20
반응형

철도에서 루비의 수집 경로와 회원 경로의 차이?

레일즈에서 수집 경로와 회원 경로의 차이점은 무엇입니까?

예를들면,

resources :photos do
  member do
    get :preview
  end
end

resources :photos do
  collection do
    get :search
  end
end

난 이해가 안돼.

구성원 경로는 구성원에게 작용하기 때문에 ID가 필요합니다.수집 경로는 개체 컬렉션에 대해 작동하기 때문에 그렇지 않습니다.미리보기는 단일 개체에 대해 작동하고 표시하기 때문에 구성원 경로의 예입니다.검색은 개체 컬렉션에 대해 작동(및 표시)하기 때문에 수집 경로의 예입니다.

                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)

테오의 대답은 정확합니다.문서화를 위해 두 가지가 서로 다른 경로 도우미를 생성한다는 점도 유념하고 싶습니다.

member {get 'preview'}다음을 생성합니다.

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

collection {get 'search'}다음을 생성합니다.

search_photos_path # /photos/search

노트 복수!

:collection - 컬렉션에서 작동하는 다른 작업에 대해 명명된 경로를 추가합니다.의 해시를 사용합니다.#{action} => #{method}방법이 있는 곳에:get/:post/:put/:delete앞의 배열 또는 :방법이 중요하지 않은 경우 :any.이러한 경로는 /users/customers_list와 같은 URL에 매핑되며 경로는 customers_list_users_url입니다.

map.map:users, :collection => {:syslog_list=> :get }

2):member와 동일:collection특정 구성원에 대해 작동하는 작업의 경우.

map.map:users, :member => {:member => :post }

로 취급되었습니다./users/1;inactive=> [:action => 'inactive', :id => 1]

단답:

둘 다member그리고.collection블록을 사용하면 레일즈가 생성하는 7개의 표준 경로보다 리소스에 대한 추가 경로를 정의할 수 있습니다.

  • A memberblock은 리소스의 단일 멤버에 새 경로를 만듭니다.
  • A collectionblock은 해당 리소스의 컬렉션에 대한 새 경로를 만듭니다.

긴 대답

레일은 다음과 같은 기능을 제공합니다.member그리고.collection리소스 수집과 개별 리소스 모두에 대한 사용자 지정 경로를 정의할 수 있도록 블록을 참조하십시오.

다음은 일반적으로 아티클 리소스에 대한 경로를 정의하는 방법입니다.

resources :articles

이렇게 하면 다음 경로가 생성됩니다.

➜ bin/rails routes -g article

      Prefix Verb   URI Pattern                  Controller#Action
    articles GET    /articles(.:format)          articles#index
             POST   /articles(.:format)          articles#create
 new_article GET    /articles/new(.:format)      articles#new
edit_article GET    /articles/:id/edit(.:format) articles#edit
     article GET    /articles/:id(.:format)      articles#show
             PATCH  /articles/:id(.:format)      articles#update
             PUT    /articles/:id(.:format)      articles#update
             DELETE /articles/:id(.:format)      articles#destroy

그러나 기사를 마크다운 방식으로 쓰고 있으며, 기사를 쓸 때 미리 보기를 봐야 한다고 가정해 보겠습니다.

다음을 생성할 수 있습니다.PreviewController그리고 그것을 사용하여 기사의 미리보기를 표시합니다.show작업, 그러나 미리 보기 작업을 추가하는 것이 편리합니다.ArticlesController그 자체로

사용자 지정 구성원 경로

다음은 에서 미리 보기 경로를 정의하는 방법입니다.ArticlesController구성원 블록을 사용합니다.

resources :articles do
  member do
    get 'preview'
  end
end

요청을 지시하는 새 경로를 추가합니다.ArticlesController#preview액션. 되지 않습니다나머지 경로는 변경되지 않은 상태로 유지됩니다. 또문 를서 ID 전달니다합으로 기사 합니다.params[:id]그리고 다음을 만듭니다.preview_article_path그리고.preview_article_url조력자

➜ bin/rails routes -g article

         Prefix Verb   URI Pattern                     Controller#Action
preview_article GET    /articles/:id/preview(.:format) articles#preview

... remaining routes

단일 멤버 경로가 있는 경우, 다음을 통과하여 간단한 버전을 사용합니다.:on블록을 제거하는 경로 옵션입니다.

resources :articles do
  get 'preview', on: :member
end

한 걸음 더 나아가서는 생략할 수 있습니다.:on선택.

resources :articles do
  get 'preview'
end

다음 경로를 생성합니다.

➜  bin/rails routes -g preview

         Prefix Verb URI Pattern                         Controller#Action       
article_preview GET  /articles/:article_id/preview(.:format) articles#preview

여기에는 두 가지 중요한 차이점이 있습니다.

  1. 의 ID는 기의는 ID같습니다과로 됩니다.params[:article_id]params[:id].
  2. 는 경로도가다변다니경됩서음에서 바뀝니다.preview_article_patharticle_preview_path그리고.preview_article_urlarticle_preview_url.

사용자 지정 수집 경로

리소스 수집에 대한 새 경로를 추가하려면 수집 블록을 사용합니다.

resources :articles do
  collection do
    get 'search'
  end
end

이렇게 하면 다음과 같은 새 경로가 추가됩니다.또한 다음을 추가합니다.search_articles_path그리고.search_articles_url조력자

search_articles GET    /articles/search(.:format)   articles#search

여러 개가 필요하지 않은 경우collection 지나쳐요, 그통과냥.:on경로에 대한 옵션.

resources :articles do
  get 'search', on: :collection
end

이렇게 하면 위와 동일한 경로가 추가됩니다.

결론

는 Rails를 이 풍부한 의 방식을 할 수 .member그리고.collection 가지 할 수 .둘 다 표준 7개 경로보다 리소스에 대한 추가 경로를 정의할 수 있습니다.

A member의 단일하는 반면, 은자단멤작버용반면는하에일원의블록,반,collection해당 리소스의 컬렉션에서 작동합니다.

원본: 멤버수집 블록을 사용하여 새 경로 정의

언급URL : https://stackoverflow.com/questions/3028653/difference-between-collection-route-and-member-route-in-ruby-on-rails

반응형