노래하듯 이야기하고, 춤추듯 정복하라.

[Ruby on Rails] Post모델에 별점(Review) 기능 추가하기 본문

프로그래밍/Ruby & Rails

[Ruby on Rails] Post모델에 별점(Review) 기능 추가하기

hyeoke 2018. 8. 10. 18:16

★ review 스캐폴드 모델 생성


$rails g scaffold review  rating:integer review:text

$rails db:migrate




★ review + user + post 관계


- $rails g migration add_user_id_to_review user_id:integer:index


- user.rb 

has_many :reviews
has_many :posts

- review.rb

belongs_to :user
belongs_to :post

- 터미널

-> $rails g migration add_post_id_to_review post_id:integer:index

-> $rails db:migrate


- post.rb

has_many :reviews



★ review의 views파일과 action에서 삭제해야 할것


- index, action



★ views 파일

- views/reviews/_form.html.erb 

<%= form_for([@post, @comment]) do |f| %>


★ routes.rb

resources :posts do
resources :reviews, except: [:show, :index ]


★ reviews_controller.rb

- 새코드 추가

before_action :set_post
def create<
  @review.post_id = @post.id
end

def set_post
  @post = Post.find(params[:post_id])
end


★ reviews/new.html.erb -> link_to 헬퍼 코드변경

<%= link_to 'Back', post_path(@post) %>

★ post controller의 show action에 코드추가 

@reviews = Review.where(post_id: @post.id).order("created_at DESC")


★ posts/show.html.erb 하단에 코드 추가

<%= link_to "Write Review with Score", new_post_review_path(@post) %>
  <div class="">
    <% if @review.blank? %>
      <h3>No Score yet, would you to add comment first!</h3>
      <%= link_to "Add Score", new_post_review_path(@post), class: "btn btn-primary" %>
    <% else %>
      <% @reviews.each do | review | %>
        <div class="reviews">
          <p><%= review.rating %></p>
          <p><%= review.body %></p>
        </div>   
        <hr>
      <% end %>
    <% end %>    
  </div>
<% end %>


-> 다음 포스팅에 이어서 별도의 라이브러리 사용하여 별점을 시각화 시켜보겠습니다.

Comments