[Ruby on Rails] 게시판 댓글 기능 구현 하면서 알게 된 것들
이번엔 강의를 듣지 않고 게시판 댓글 기능을 구현해보았다. 이 글에서는 배우게 된 점을 적어보려한다. (나중에 내가 다시 확인하기 위해서 ...)
🐣 모델의 관계 (board, comment)
하나의 board
는 여러 개의 comments
를 가질 수 있다. 따라서 board와 comment는 1:n
의 관계를 가진다. 블로그에 찾아보니 has_many
와 belongs_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배였다 🐣
Author And Source
이 문제에 관하여([Ruby on Rails] 게시판 댓글 기능 구현 하면서 알게 된 것들), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@boori/Ruby-on-Rails-게시판-댓글-기능-구현-하면서-알게-된-것들저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)