티스토리 뷰

안녕 숙대 멋사 여러분 ^,^ 

오늘은 스캐폴딩리소스를 이용한 라우팅에 대해서 배울거예요

이제부터는 리소스를 이용해서 라우팅도 간편하게 해봅시다!

 

 

 

첫번째, 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 보이나요??

앞으로 여러분들이 프로젝트를 만들 때 유용하게 이용할 수 있는 게 바로 이겁니다

 

 


 

두번째, resources



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



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함