티스토리 뷰
안녕 숙대 멋사 여러분 ^,^
오늘은 스캐폴딩과 리소스를 이용한 라우팅에 대해서 배울거예요
이제부터는 리소스를 이용해서 라우팅도 간편하게 해봅시다!
첫번째, scaffolding
리소스를 배우기 전에 scaffolding에 대해서 알아보기로 합시다
스캐폴딩은 우리가 배우는 레일즈에서는 crud 기능을 하는 기본 토대를 만들어 주는 거라고 했었죠
아~주~ 간단하게 배쉬창에 다음과 같이 명령어를 입력하면 crud를 만들 수 있어요
db폴더의 마이그레이션 파일, app폴더의 모델 파일, posts_컨트롤러 파일, 여러개의 뷰 파일,
그리고 assets폴더의 몇가지 파일들이 생긴 걸 확인할수 있죠!
또, routes.rb 파일에는 이따가 배울 한 라인이 다음과 같이 추가된 걸 확인할 수 있어요
저는 root페이지 설정까지 해줘서 다음과 같이 작성할수 있었어요
config/routes.rb
1
2
3
4
5 |
Rails.application.routes.draw do
root 'posts#index'
resources :posts
end
|
cs |
그리고 우리가 scaffold를 이용해서 만들어준 경우에는 컨트롤러나 뷰 뿐만 아니라 모델까지 한번에 생성해준것이기 때문에 배쉬창에 어떤 명령어를 하나 입력해야하죠
정말 간단하죠?
그런데 왜 여태껏 이렇게 쉬운 걸 알려주지 않았던 걸까요 ㅎㅎ
1. crud 기능을 직접 하나하나 작성하면서 공부할 필요가 있으니까
2. 사실 scaffold는 별로 좋지 않아요
하지만 여기서도 아주 유용하게 쓰일만한 게 있는데 그게 바로 resources 예요
위에 routes.rb파일에 나온 resources :posts 보이나요??
앞으로 여러분들이 프로젝트를 만들 때 유용하게 이용할 수 있는 게 바로 이겁니다
1. 리소스에 대해
리소스는 위에서 말했듯이 프로젝트를 만들때 아주 유용하게 쓸 수 있는데요
앞서 스캐폴드를 만들었을 때 어떻게 만들었는지 다시 생각해봅시다
보통 crud 기능을 하는 프로젝트를 만들 경우에는 각각의 URI pattern에 대해 접근했을 때 어느 컨트롤러의 어느 액션으로 이동할지 직접 한 줄 한 줄 입력했어야 했는데
스캐폴드를 이용했을 때에는 루트 페이지만 설정해줬더니 다 저절로 됐어요
스캐폴드를 이용하면 그냥 가능해서 그런 것이었을까요...?
그런 게 아니라 스캐폴드를 만들 때 저절로 작성되어 있었던 resources :posts 덕분에 쉽게 이용할 수 있었던 거랍니다
그러면 지금 정의되어 있는 주소가 어떻게 정의되어있는지 먼저 확인해볼가요?
지금 정의된 주소를 확인하려면 배쉬창에서 rake routes를 입력하면 확인할 수 있죠 ^,^
기본적으로 routes.rb 파일에서 다음과 같이 작성했다고 가정하면
config/routes.rb
1
2
3
4
5 |
Rails.application.routes.draw do
root 'posts#index'
resources :posts
end
|
cs |
다음과 같은 결과를 얻을 수 있을 거예용
여러분들도 위와 같은 결과가 출력됐나요??
루트 페이지나 다른 주소를 정의했느냐에 따라서 다른 결과를 확인할 수도 있으니까 꼭 같지 않아도 된답니다
이렇게 posts_controller에 대해서 resources를 이용해서 정의해 줄 경우
index, create, new, edit, show, update, destroy 액션들이 정의되어 있어여
그러니까 crud 프로젝트를 만들 때 리소스를 이용하면 각 액션에 대한 라우트를 한 줄 한 줄 여러줄에 걸쳐서 정의해줄 필요 없이 한 줄에 끝낼 수 있다~! 이거죠
리소스를 이용해서 라우팅을 설정할 경우,
레일즈에서는 기본적으로 다음과 같이 URI에 대해 각각의 액션으로 매칭을 해 줄 때
다음과 같은 규칙으로 매칭을 해 주게 됩니다
HTTP Verb 가는 방법 |
Path 출발 정보 |
Controller#Action 도착 정보 |
Used for 용도 |
GET |
/posts |
posts#index |
display a list of all posts |
GET |
/posts/new |
posts#new |
return an HTML form for creating a new post |
POST |
/posts |
posts#create |
create a new post |
GET |
/posts/:id |
posts#show |
display a specific post |
GET |
/posts/:id/edit |
posts#edit |
return an HTML form for editing a post |
PATCH/PUT |
/posts/:id |
posts#update |
update a specific post |
DELETE |
/posts/:id |
posts#destroy |
delete a specific post |
이런 규칙으로 라우팅하는 걸 RESTful하다고 말할 수 있다고 했었죠
2. 리소스 활용하기
그러면 이제부터는 리소스를 ***잘*** 활용하는 방법에 대해서 알아봅시다
2.1 특정 액션 지정해주기
2.1.1 posts_controller에서 index액션만 이용하고 싶을 때
1
2
3
4 |
Rails.application.routes.draw do
resources :posts, only: :index
end
|
cs |
2.1.2 posts_controller에서 index, show액션을 제외하고 이용하고 싶을 때
1
2
3
4 |
Rails.application.routes.draw do
resources :posts, except: [:index, :show]
end
|
cs |
2.2 중첩 resources
2.2.1 post와 1대다 관계인 comment 모델에 접근할 때
1
2
3
4
5
6 |
Rails.application.routes.draw do
resources :posts do
resources :comments
end
end
|
cs |
2.2.2 post와 1대다 관계인 comment 모델에 접근할 때(주소 줄이는 방법)
1
2
3
4
5
6 |
Rails.application.routes.draw do
resources :posts do
resources :comments, shallow: true
end
end
|
cs |
2.3 노출되는 컨트롤러 이름 지정해주기
2.3.1 post와 1대다 관계인 comment 모델에 접근할 때
1
2
3
4 |
Rails.application.routes.draw do
resources :home, controller: :posts
end
|
cs |
2.3.1 post와 1대다 관계인 comment 모델에 접근할 때
1
2
3
4 |
Rails.application.routes.draw do
resources :posts , as: home
end
|
cs |
2.4 추가 액션 지정해주기
2.4.1 posts_controller에 like 액션 추가해주기
1
2
3
4
5
6
7
8 |
Rails.application.routes.draw do
resources :posts do
member do
get ‘like’
end
end
end
|
cs |
2.4.2posts_controller에 like 액션 추가해주기
1
2
3
4
5
6 |
Rails.application.routes.draw do
resources :posts do
get ‘like’, on: :member
end
end
|
cs |
추가해줄 액션이 한 줄일 경우에는 이 방법이 더 간단하겠네요
2.4.3posts_controller에 search 액션 추가해주기
1
2
3
4
5
6
7
8 |
Rails.application.routes.draw do
resources :posts do
collection do
get ‘search’
end
end
end
|
cs |
2.4.4posts_controller에 search 액션 추가해주기
1
2
3
4
5
6 |
Rails.application.routes.draw do
resources :posts do
get ‘search’, on: :collection
end
end
|
cs |
여기서도 액션이 한 줄인 경우엔 이 방법을 쓰는 게 코드를 더 효율적으로 쓸 수 있겠네요
여러분에게 소개한 활용방법은 이것뿐이지만 아래 참고 문서를 확인해보면 더 다양한 활용방법을 확인할 수 있어요
여러분들도 앞으로 rails를 더 잘 활용할수 있길 바라 ^,~
참고문서
퍼펙트 루비 온 레일즈 http://book.naver.com/bookdb/book_detail.nhn?bid=9821773
레일즈 가이드 http://guides.rubyonrails.org/routing.html
'교육팀과 함께하는 > ruby on rails' 카테고리의 다른 글
[방학 2주차] REST API 정복하기 - (1) RESTful & (2) 다음 카카오 검색 API & (3) 네이버 성인검색어 판별 API (3) | 2017.08.14 |
---|---|
[방학 7주차] AWS 배포하기 (1) | 2017.08.13 |
[방학 6주차] 좋아요 & 검색 기능 (4) | 2017.08.13 |
[방학 6주차] 권한 설정하기 (0) | 2017.08.04 |
[방학 2주차] 소셜로그인 (0) | 2017.08.03 |