Как проверить, оценил ли пользователь уже книгу - PullRequest
1 голос
/ 17 апреля 2019

Я хочу создать систему рецензирования, например, Google Play, для моего приложения из библиотеки, что означает, что 1 пользователь просто может отправить рецензию 1 раз, в следующий раз будет редактироваться рецензия

https://imgur.com/a/RciVuln

Это то, что я до сих пор:

В книге / show.html.erb

     <div class="col-md-7 col-md-offset-1">
      <% @book.reviews.each do |r| %>
        <div class = "reviews" >
          <div class="star-rating" data-score= <%= r.rating %></div>
          <%= link_to r.user.name, r%>
          <p><%= r.comment %></p>
        </div>
      <% end %>    
     </div>
     </div>

     <script>
 $('.star-rating').raty({
    path: '/assets/',
    readOnly: true,
    score: function() {
      return $(this).attr('data-score');
    }
  });
     </script>

В reviews_controller

    def update
    @reviews = Reviews.find_by(params[:id])
    @review.update_attributes(reviews_params)
    @book  = Book.find(@review.book_id)
    flash[:success] = "Comment updated"
    redirect_to @book
    end

    def edit
    @review = Review.find(params[:id])
    end

В reviews / edit.html.erb:

    <%= form_for(@review) do |f| %>
    <%= f.error_notification message: 
     f.object.errors[:base].to_sentence if 
     f.object.errors[:base].present? %>
    <div class="field">
    <div id="star-rating"></div>
    </div>
    <%= f.label :comment %>
    <%= f.text_area :comment, class: 'text-area' %>
    <%= f.hidden_field :book_id%>
   <div>

   <div class="form-actions">
   <%= f.button :submit, class:"btn btn-primary" %>
   </div>
   <% end %>
   <script>
   $('#star-rating').raty({
    path: '/assets/',
    scoreName: 'review[rating]'
   });
   </script>

Я не знаю, есть ли у rails функция для проверки идентификатора текущего пользователя с помощью идентификатора обзора пользователя для этой книги

1 Ответ

1 голос
/ 17 апреля 2019

То, что вы хотите, это добавить ограничение проверки к вашей модели обзора.

class Review
  belongs_to :user
  belongs_to :book

  validates :book_id, uniqueness: { scope: :user_id }
end

Предложение проверки может быть прочитано как «проверка уникальности book_id для данного user_id».

Таким образом, проверка будет ложной, если пользователь попытается создать рецензию на книгу, которую он / она уже рецензировал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...