Ruby on rails 如何检查用户是否已经对一本书进行了评级
我想为我的图书馆应用程序制作一个像Google Play这样的评论系统,这意味着一个用户只能提交一次评论,下一次将是编辑评论 这就是我到目前为止所做的: 在Book/show.html.erb中Ruby on rails 如何检查用户是否已经对一本书进行了评级,ruby-on-rails,ruby,Ruby On Rails,Ruby,我想为我的图书馆应用程序制作一个像Google Play这样的评论系统,这意味着一个用户只能提交一次评论,下一次将是编辑评论 这就是我到目前为止所做的: 在Book/show.html.erb中 <div class="col-md-7 col-md-offset-1"> <% @book.reviews.each do |r| %> <div class = "reviews" > <div
<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/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>
$(“#星级”).raty({
路径:'/assets/',
scoreName:“审查[评级]”
});
我不知道rails是否具有检查当前用户id和该书的用户评论id的功能您想要的是在您的评论模型上添加验证约束
class Review
belongs_to :user
belongs_to :book
validates :book_id, uniqueness: { scope: :user_id }
end
validation子句可以理解为“验证给定用户id的图书id的唯一性”
因此,如果用户试图为他/她已经阅读过的书籍创建评论,验证将是错误的。如果是,请不要忘记投票/接受解决方案;)
class Review
belongs_to :user
belongs_to :book
validates :book_id, uniqueness: { scope: :user_id }
end