RubyOnRails 2) Model 관계 설정
Model 간의 관계를 설정해서 Post와 Reply로 활용할 수 있다.
글이 있으면 해당 글이 지니는 댓글을 모델로 지니고 있을 수 있는데 이러한 관계를 통해
여러 가지 것들을 구현할 수 있는데, 대표적으로 글, 댓글을 예시로 들 수 있다.
먼저 다음의 명령어를 통해 Post에 소속될 Reply 모델을 만든다.
1 | $ rails g model Reply content:string post_id:integer $ rails db:migrate | cs |
다음 각각 rb 파일에 다음의 코드를 통해 관계를 설정한다. belongs_to :post // has_many :replies
1 2 3 4 5 | \app\models\post.rb has_many :replies \app\models\reply.rb belongs_to :post | cs |
그 다음, 다음의 터미널 명령어를 통해 모델 Reply의 Controller를 만든다.
1 | $ rails g controller replies | cs |
그리고 해당 컨트롤러의 액션을 정의해준다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | \app\controllers\replies_controller.rb def create @reply = Reply.new @reply.content = params[:content] @reply.post_id = params[:post_id] @reply.save redirect_to :back end def destroy @reply = Reply.find(params[:id]) @reply.destroy redirect_to :back end | cs |
다음 View 중에서도 Post의 Show.html.erb 에서 Reply를 활용할 예정이므로 해당 view 파일에서 댓글창을 처리해준다.
이 때, 댓글 작성창과 더불어 post_id를 넘겨주기 위해서 hidden input element를 추가해준다.
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 | \app\views\posts\show.html.erb <%= render "navbar" %> <div class="container"> <div class="alert alert-dark" role="alert"> <h2><%=@post.title%></h2> <hr> <%=@post.content%> </div> <a href="/posts/index">목록</a> <a href="/posts/edit/<%= @post.id %>">수정</a> <a href="/posts/destroy/<%= @post.id %>">삭제</a> <h2>댓글</h2><br> <form action="/replies/create" method="post"> <input type="text" name="content" placeholder="댓글 내용을 입력하세요" style="width:80%"></input> <input type="hidden" name="post_id" value=<%= @post.id %> ></input> <button type="submit" class="btn btn-primary">작성</button> </form> <% @post.replies.each do |r| %> <%= r.content %> <a href="/replies/destroy/<%= r.id %>">삭제</a><br> <% end %> </div> | cs |
마지막으로 Reply 모델의 Routing을 Route.rb에서 처리해준다.
1 2 3 4 5 6 | \config\routes.rb # Reply ---------------------------------------- post 'replies/create' => 'replies#create' get 'replies/destroy/:id' => 'replies#destroy' | cs |
'Archived(Programming) > Ruby on Rails(기초)' 카테고리의 다른 글
RubyOnRails 5) Like 좋아요 기능 (0) | 2018.12.28 |
---|---|
RubyOnRails 4) Search 검색하기 (0) | 2018.12.27 |
RubyOnRails 3) Devise 기본 (0) | 2018.12.26 |
RubyOnRails 1) CRUD 기본 (0) | 2018.12.24 |
RubyOnRails Excel file 파싱하기(xlsx 파일) (0) | 2018.11.17 |