前提・実現したいこと
プログラミング初心者です。
現在、ruby、ruby on railsを用いて、本の感想を投稿したり、その評価を投稿したりするシステムを作っております。
ユーザーからの投稿がなされると、その投稿結果が、indexに表示されるシステムにしたいと考えております。
今回の問題は、5段階評価で評価をつけて投稿をすると、index画面に遷移した際(ヘッダーのBooksを押したとき)、星が一瞬10個表示(画像1)され、5個に戻る(画像2)という挙動が見受けられました。
この、10個星が表示されてしまう挙動をなくしたいと考えております。
何か解決策はないでしょうか。
発生している問題・エラーメッセージ
5段階評価で表示したいが、一瞬だけ、星が10個表示されてしまう。
エラーメッセージ:なし
該当のソースコード
Ruby
1 2【books/index.html.erb】 3 4<%= render 'searchform' %> 5<% if @book.errors.any? %> 6 <ul> 7 <% @book.errors.full_messages.each do |message| %> 8 <li><%= message %></li> 9 <% end %> 10 </ul> 11<% end %> 12 13<div class='container px-5 px-sm-0'> 14 <div class='row'> 15 <div class='col-md-3'> 16 <h2>User info</h2> 17 <%= render 'users/info', user: current_user %> 18 <h2 class="mt-3">New book</h2> 19 <%= render 'form', book: @book %> 20 </div> 21 <div class='col-md-8 offset-md-1'> 22 <h2>Books</h2> 23 <%= render 'index', books: @books, book: @book %> 24 </div> 25 </div> 26</div>
Ruby
1 2【books/_index.html.erb】 3<table class='table table-hover table-inverse'> 4 <thead> 5 <tr> 6 <th></th> 7 <th>Title</th> 8 <th>Opinion</th> 9 <th colspan="3"></th> 10 </tr> 11 </thead> 12 <tbody> 13 <% books.each do |book| %> 14 <%= render 'books/book', book: book %> 15 <% end %> 16 </tbody> 17</table>
Ruby
1 2【books_controller.erb】 3 4class BooksController < ApplicationController 5 6 def show 7 @book = Book.find(params[:id]) 8 @book_new = Book.new 9 @user = @book.user 10 @book_comment = BookComment.new 11 end 12 13 def index 14 @books = Book.all 15 @book = Book.new 16 end 17 18 def create 19 @book = Book.new(book_params) 20 @book.user_id = current_user.id 21 if @book.save 22 redirect_to book_path(@book), notice: "You have created book successfully." 23 else 24 @books = Book.all 25 render 'index' 26 end 27 end 28 29 def edit 30 @book = Book.find(params[:id]) 31 @user = @book.user 32 if @user == current_user 33 render :edit 34 else 35 redirect_to books_path 36 end 37 end 38 39 def update 40 @book = Book.find(params[:id]) 41 if @book.update(book_params) 42 redirect_to book_path(@book), notice: "You have updated book successfully." 43 else 44 render "edit" 45 end 46 end 47 48 def destroy 49 @book = Book.find(params[:id]) 50 @book.delete 51 redirect_to books_path 52 end 53 54 def search 55 @range = params[:range] 56 search = params[:search] 57 keyword = params[:keyword] 58 @books = User.search(search, keyword) 59 end 60 61 private 62 63 def book_params 64 params.require(:book).permit(:title, :body, :evaluation) 65 end 66 67end 68
Ruby
1【book.rb】 2class Book < ApplicationRecord 3 belongs_to :user 4 has_many :book_comments, dependent: :destroy 5 has_many :favorites, dependent: :destroy 6 7 def favorited_by?(user) 8 favorites.where(user_id: user.id).exists? 9 end 10 11 validates :title, presence: true 12 validates :body, presence: true, length: {maximum: 200} 13 validates :evaluation, numericality: { 14 less_than_or_equal_to: 5, 15 greater_than_or_equal_to: 1 16 } 17 18 def self.search(searches, keywords) 19 if searches == "perfect_match" 20 @book = Book.where("title LIKE? OR body LIKE?", "#{keywords}", "#{keywords}") 21 elsif searches == "forward_match" 22 @book = Book.where("title LIKE? OR body LIKE?", "#{keywords}%", "#{keywords}%") 23 elsif searches == "backward_match" 24 @book = Book.where("title LIKE? OR body LIKE?", "%#{keywords}", "%#{keywords}") 25 else 26 @book = Book.where("title LIKE? OR body LIKE?", "%#{keywords}%", "%#{keywords}%") 27 end 28 end 29end 30
Ruby
1 2【books/_book.html.erb】 3<tr> 4 <td> 5 <%= link_to user_path(book.user) do %> 6 <%= attachment_image_tag(book.user, :profile_image, :fill, 50, 50, fallback: "no-image-icon.jpg") %> 7 <% end %> 8 </td> 9 <td><%= link_to book.title, book_path(book), class: "book_#{book.id}" %></td> 10 <td><%= book.body %></td> 11 12 <td id="favorite-btn-<%= book.id %>"> 13 <%= render partial: "favorites/favorite-btn",locals: {book: book } %> 14 </td> 15 16 <td id="comments"> 17 コメント数:<%= book.book_comments.count %> 18 </td> 19 20 <td class="book-evaluation" data-score="<%= book.evaluation %>"></td> 21</tr> 22 23<script> 24$('.book-evaluation').raty({ 25 readOnly: true, 26 path: '/assets/' 27}); 28</script> 29
試したこと
classやidの変更などを行いましたが、上手く解決できませんでした。
補足情報(FW/ツールのバージョンなど)
必要な情報が足りていないかもしれませんので、必要な情報がございましたら、お教えください。
回答2件
あなたの回答
tips
プレビュー