【发布时间】:2014-01-08 20:29:21
【问题描述】:
我正在尝试按照本教程进行操作,但遇到了困难:Adding a 5 star ratings feature to a Rails 4 model。
我是 javascript 和 ajax 的初学者,所以我花了几个小时学习 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'
});
删除部分^^^
【问题讨论】:
-
ratings.size可能是 0?也许在average_rating中使用了导致评分不足的条件? -
你能解释更多吗?我不确定你是什么意思。我在评分模型中从 rails 控制台手动输入了 2 个评分,并且两个评分都有不同的值
-
您收到了
ZeroDivisionError,看起来ratings.size不知何故为0,即使您手动添加了两个评级。为什么不尝试用1替换ratings.size看看?或者也许注释掉该行并执行ratings.inspect? -
如果我将 rating.size 替换为 1,则页面加载时没有星号(我认为我有 javascript
标签: javascript jquery ruby-on-rails ajax raty