철도에서 루비의 수집 경로와 회원 경로의 차이?
레일즈에서 수집 경로와 회원 경로의 차이점은 무엇입니까?
예를들면,
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
member
block은 리소스의 단일 멤버에 새 경로를 만듭니다. - A
collection
block은 해당 리소스의 컬렉션에 대한 새 경로를 만듭니다.
긴 대답
레일은 다음과 같은 기능을 제공합니다.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
여기에는 두 가지 중요한 차이점이 있습니다.
- 의 ID는 기의는 ID같습니다과로 됩니다.
params[:article_id]
에params[:id]
. - 는 경로도가다변다니경됩서음에서 바뀝니다.
preview_article_path
article_preview_path
그리고.preview_article_url
article_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
'programing' 카테고리의 다른 글
WPF DataGrid 렌더링 속도가 매우 느림 (0) | 2023.06.04 |
---|---|
다른 사람(iPhone) 내에서 앱 실행 (0) | 2023.06.04 |
Git Bash의 Azure CLI (0) | 2023.06.04 |
여러 모니터에서 Eclipse 환경을 구성하는 방법에 대한 팁이 있습니까? (0) | 2023.06.04 |
시스템 오류: 상위 모듈 '이(가) 로드되지 않았습니다. 상대 가져오기를 수행할 수 없습니다. (0) | 2023.06.04 |