我正在尝试按照本教程操作而陷入困境:Adding a 5 star ratings feature to a Rails 4 model。
我是javascript和ajax的begginer所以我花了几个小时来学习ajax如何使用javascript。我认为问题与average_rating
方法的位置有关(rails问题?)。
def average_rating
ratings.sum(:score) / ratings.size
end
目前,我已经按照教程的具体说明,同时将评论替换为评论。它在教程中说明了在评论模型中定义average_rating(我的是在评论模型中),我不知道为什么我会这样做。
此外我已经添加了这个(不确定它是否属于当前控制器或者它是否属于评级控制器):
#this is the controller used for the view which displays the stars
def page
@rating = Rating.where(review_id: @review.id, user_id: @current_user.id).first
unless @rating
@rating = Rating.create(review_id: @review.id, user_id: @current_user.id, score: 0)
end
end
当我尝试在此处加载页面时出现错误:ZeroDivisionError
下面显示divided by 0
并突出显示此行score: <%= @review.average_rating %>,
更新当我从具有average_rating的视图中删除此脚本时,星标显示为my_rating。所以有些东西搞乱了平均部分:
<script> #did not delete this line
$('#star').raty({
readOnly: true,
score: <%= @review.average_rating %>,
path: '/assets'
});
删除部分^^^
答案 0 :(得分:0)
基本上,我希望获得更多信息,但这里有一些可能会有所帮助的提示:
has_many :ratings
和评级为'belongs_to:user /:review'。其他方向 - 您是否在控制器方法中获得评级?如果是这样,请考虑将其更改为@ratings。 Rating.where(review_id: @review.id, user_id: @current_user.id).first_or_create do |rating|
rating.score = 0
end