LoginSignup
2
0

More than 1 year has passed since last update.

レビュー機能(レビューを一覧表示させる)

Posted at

mac OS バージョン11.6
エディタ…VScode
Rails 6.0.4

映画のレビュー機能に関する備忘録です。
レビューを一覧表示させることが目的で、レビューの投稿に関する記述は端折っています。
必要であれば別の記事で追記します。
6df600d58c843b86d07be66a56a8373e.png

1.モデル設計

65c95b6e79bed96ec091f33cc49f179d.png
 ・Userは多くのReviewを持ち、Movieも多くのReviewを持つことになる多対多の関係。
 ・中間テーブルを作成して1つのレコード毎に、レビューの所有者(user_id)・映画(movie_id)・レビューの内容を格納するreview_textカラムを追加する。

movie.rb
class Movie < ApplicationRecord
  has_many :reviews # Movie.commentsで、投稿が所有するコメントを取得できる
end
user.rb
class User < ApplicationRecord
  has_many :reviews  #User.reviewsで、ユーザーの所有するコメントを取得できる
end
review.rb
class Review < ApplicationRecord
   .
   .
   .
   belongs_to :user    # Review.userでコメントの所有者を取得
   belongs_to :movie  # Review.movieでそのコメントがされた投稿を取得
end

2.コントローラー設計

movies_controller.rb
def show
    .
    .
    @reviews = @movie.reviews # レビューを一覧表示
  end
reviews_controller.rb
class ReviewsController < ApplicationController
  before_action :require_user_signed_in, only: [:create]
  def create
    @review = current_user.reviews.new(review_params) 
    @review.save
    redirect_to movie_path(@review.movie_id)
  end

  def new
    @review = Review.new
  end

  private
    def review_params
      params.require(:review).permit(:movie_id, :user_id, :text, :raty) 
    end
  end  

3.viewを編集

movies/show.html.erb
    .
    .
    .
    <h1>レビュー一覧</h1>
<% @reviews.each do |review|%>
  <div class=card>
    <%= review.user.name %><br>
    <p>評価 :<%= review.raty %></p>
    <div id="star-rate<%= review.id %>"></div>    
    <script>
      $('#star-rate<%= review.id%>').raty({
        size      : 36,
        starOff   : '<%= asset_path('star-off.png') %>',
        starOn    : '<%= asset_path('star-on.png') %>',
        starHalf: '<%= asset_path('star-half.png') %>',
        readOnly: true,  //星を読み取り専用にする
        score: <%= review.raty %>,
      });
    </script>
    <p>内容:<%= review.text%></p>
  </div>
<% end %>

参考:https://qiita.com/kurawo___D/items/d2fefdd329f5310113aa

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0