본문 바로가기

Archived(Programming)/Ruby on Rails(기초)

RubyOnRails 9) Category 나누기

RubyOnRails 9) Category 나누기


여러 게시글들을 카테고리에 맞게 나눠서 관리할 수 있도록 하고자 한다.

먼저 Post 모델에서 category field를 추가한다.


1
2
3
$ rails g migration add_category_to_posts category:integer
($ rails g migration AddCategoryToPosts category:integer)
$ rails db:migrate
cs


그  다음 Routes.rb 파일에서 카테고리 ID를 나눠서 get으로 접근할 수 있도록 새롭게 지정해준다.

또한 해당 Index에서 글쓰기를 눌렀을 때, 카테고리에 맞는 게시글을 쓸 수 있도록 new도 변경.


1
2
3
4
Routes.rb
...
get 'posts/index/:category' => 'posts#index'
get 'posts/new/:category' => 'posts#new'
...
cs


그리고, 기존의 index에서 Post를 전부 넘겨줬다면 이제는 해당 category에 맞는 Post만 넘겨주기 위해 다음의 수정을 거친다.


1
2
3
4
5
6
7
8
/app/controllers/posts_controller.rb
...
# 해당 분류별로 보여주기
def index
  @category = params[:category]
  @posts = Post.where("category like ?""%#{params[:category]}%").order("created_at DESC").page(params[:page]).per(10)
  @page = (params[:page]).to_i
end
...
cs


다음, new.html.erb의 view 파일에서 category 값을 hidden input으로 넘겨줘야 한다.

이걸 controller에서도 마찬가지로 field 값을 지정해줘야 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/app/controllers/posts_controller.rb
 
...
def new
  @category = params[:category]
end
 
def create
  ~~
  @post.category = params[:category]
  ~~
end
...
 
/app/view/new.html.erb
...
<input type="hidden" name="category" value=<%=@category%>></input>
...
cs



그리고 모든 게시판 종류를 볼 수 있는 mainPage View를 추가하거나 할 수 있다.

(물론, 따로 mainpage를 두지않고 다음과 같이 navbar를 통해서 이동하는 것도 가능하다)



마지막으로, View 파일에서 기존에 뒀던 링크들을 전부 바뀌어진 category가 고려된 link로 수정한다.