레일스 걸스 앱에 댓글 달기
Created by Janika Liiv, @janikaliiv
railsgirls 애플리케이션의 아이디어에 댓글을 달겠습니다.
레일스을 설치하고 아디이어를 만드는 설명을 이곳을 참고합니다.
1.Create comment scaffold
댓글(comment)를 스캐폴드로 만듭니다. 댓글에는 댓글을 다는 사람의 이름, 댓글 내용, 댓글을 달 아이디어의 테이블에 대한 레퍼런스(idea_id
)가 있습니다.
rails g scaffold comment user_name:string body:text idea_id:integer
실행결과 댓글 테이블을 새로 추가할 수 있도록 데이터베이스 마이그레이션 파일을 생성합니다. 마이그레이션은 아래와 같이 실행합니다.
rake db:migrate
2.Add relations to models
레일스에게 객체(아디어와 댓글)의 관계를 알려주어야 합니다. 아이디어 하나에 댓글은 여러개 달 수 있기때문에 아이디어 모델은 객체 관계를 알아야 합니다. app/models/idea.rb 파일을 수정합니다.
class Idea < ActiveRecord::Base
아래에 다음을 추가합니다.
has_many :comments
댓글은 아이디어가 필요합니다. app/models/comment.rb
파일을 수정합니다.
class Comment < ActiveRecord::Base
아래에 다음과 같이 추가합니다.
belongs_to :idea
3.Render the comment form and existing comments
app/views/ideas/show.html.erb 파일을 수정합니다.
<%= image_tag(@idea.picture_url, :width => 600) if @idea.picture.present? %>
이미지 태그 아래에 다음과 같이 추가합니다.
<h3>Comments</h3>
<% @comments.each do |comment| %>
<div>
<strong><%= comment.user_name %></strong>
<br />
<p><%= comment.body %></p>
<p><%= link_to 'Delete', comment_path(comment), method: :delete, data: { confirm: 'Are you sure?' } %></p>
</div>
<% end %>
<%= render 'comments/form' %>
app/controllers/ideas_controller.rb
파일을 수정합니다. show 액션 아래에
@idea = Idea.find(params[:id])
다음과 같이 추가합니다.
@comments = @idea.comments.all
@comment = @idea.comments.build
app/views/comments/_form.html.erb
파일을 수정합니다.
<div class="field">
<%= f.label :body %><br />
<%= f.text_area :body %>
</div>
아래에 다음과 같이 추가합니다.
<%= f.hidden_field :idea_id %>
그리고 아래의 줄을 지웁니다.
<div class="field">
<%= f.label :idea_id %><br>
<%= f.number_field :idea_id %>
</div>
끝났습니다. 아이디어 목록에서 하나를 클릭해서 보면 댓글을 새로 달 수 있는 폼이 보이고 이미 달아둔 댓글에는 삭제 버튼이 보입니다.