[Ruby on Rails] 게시판 댓글 기능 구현 하면서 알게 된 것들

이번엔 강의를 듣지 않고 게시판 댓글 기능을 구현해보았다. 이 글에서는 배우게 된 점을 적어보려한다. (나중에 내가 다시 확인하기 위해서 ...)

🐣 모델의 관계 (board, comment)

하나의 board는 여러 개의 comments를 가질 수 있다. 따라서 board와 comment는 1:n의 관계를 가진다. 블로그에 찾아보니 has_manybelongs_to를 추가하라고 되어있었는데 도무지 어디에 추가해야할지 몰라 막막한 경험을 겪었다. 나는 계속 db/migrate 파일 안에 추가해서 에러가 났었는데 알고보니 app/models 안에 추가하는 것이었다.
board.rb에는 has_many :comments를 추가하였다. has_many에 작성할 때는 복수형을 써야한다.
comment.rb에는 belongs_to :board를 추가하였다. 이걸 추가하고 나니까 컨트롤러에서 @comments = @board.comments를 사용할 수 있었다.

🐣 redirect_to

처음에는 redirect_to를 쓸 때 url 이동만 할 수 있었다. ('/index' 이런식으로)
그런데 댓글을 detail페이지에서 생성하면 다시 detail로 돌아가야했다.
detail페이지는 board_id가 url에 담겨있어야한다. 그래서 boared_id를 포함해서 redirect_to를 써야했다. 하지만 어떻게 하는지 몰랐다. ${} 이것을 써서 해보고 그냥도 해보고 했지만 계속 에러가 났다. 찾다보니 해결할 수 있었다! 바로바로

redirect_to controller: '컨트롤러이름', action: '액션이름', 파라미터이름: params[:파라미터값]

이렇게 하니 해결되었다. comment와 board는 각각 다른 컨트롤러이기 때문에
컨트롤러를 board로 지정해주고 board의 detail을 액션이름으로 지정해주고 board_id를 파라미터 값으로 지정해주었다. (현재 comment 컨트롤러에서 comment 생성 로직을 작성하고 있기 때문이다.)

🐣 모든 comments 가져오기

모든 comments를 가져오는 방법 ! (모두 board_id가 필요하다. board_id는 comments 생성 시 하나의 속성으로 저장해준다.)
1. where

@comments = Comment.where(:board_id => params[:board_id])

2.메서드 사용

@board = Board.find(params[:board_id])
@comments = @board.comments

@board.comments는 맨 위의 모델 세팅할 때 has_many를 작성했기 때문에 comments 메서드 사용이 가능한 것이다.
2가지의 방법이 있지만 2번 방법이 더 이해하기도 쉽고 간단한 것 같았다!

그럼 끝! 계속 삽질하다가 해결하니 맛도 2배 기쁨도 2배였다 🐣

좋은 웹페이지 즐겨찾기