星级rails 4 jquery ajax javascript raty

星级rails 4 jquery ajax javascript raty,javascript,jquery,ruby-on-rails,ajax,raty,Javascript,Jquery,Ruby On Rails,Ajax,Raty,我正试图遵循本教程,但我被卡住了: 我是一个精通javascript和ajax的乞丐,所以我花了几个小时学习ajax如何使用javascript。我相信这个问题与平均评分方法的位置有关(rails问题?) 目前,我已经完全遵循了教程的内容,同时用评论代替评论。在教程中,它说要在评论模型中定义平均_评级(我的在评论模型中),我不知道为什么要这样做 此外,我还添加了以下内容(不确定它是否属于当前控制器或评级控制器): 当我尝试加载页面时,这里是我得到的错误:ZeroDivisionError下面是除

我正试图遵循本教程,但我被卡住了:

我是一个精通javascript和ajax的乞丐,所以我花了几个小时学习ajax如何使用javascript。我相信这个问题与
平均评分方法的位置有关(rails问题?)

目前,我已经完全遵循了教程的内容,同时用评论代替评论。在教程中,它说要在评论模型中定义平均_评级(我的在评论模型中),我不知道为什么要这样做

此外,我还添加了以下内容(不确定它是否属于当前控制器或评级控制器):

当我尝试加载页面时,这里是我得到的错误:
ZeroDivisionError
下面是
除以0
,并突出显示这一行
分数:,

更新当我从具有平均_评级的视图中删除此脚本时,星星将显示我的_评级。所以,平均部分出了问题:

<script> #did not delete this line
  $('#star').raty({
    readOnly: true,
    score: <%= @review.average_rating %>,
    path: '/assets'
  });
#未删除此行
$('星').raty({
只读:对,
分数:,
路径:'/assets'
});

已删除部分^^ ^

基本上,我希望获得更多信息,但以下是一些可能有帮助的提示:

  • 确保关系正常运行:确保您对用户/评论有
    多个:评分
    ,对评分有“归属于:用户/:评论”。其他方向-您是否通过控制器方法获得评级?如果是这样,考虑把它改为@评级。
  • 使用first\u或\u XXXX-这是保存条件实例化的一个很好的rails选项。有一种方法正是你所做的:
Rating.where(review_id:@review.id,user_id:@current_user.id)。首先创建do|Rating|
评分:0分
结束

  • 最后,ratings.size在创建后不会更新,这可能解释了零除法。阅读更多信息。因此,建议使用count(将检查数据库,因此仅统计保存的评级)或length(即user/review.ratings.length),后者也将统计生成(未保存)对象

希望有帮助。

评分。大小可能为0?可能在
平均评分中使用一个条件,以解释评分不足的原因?您能解释更多吗?我不确定您的意思。我在评分模型中从rails控制台手动输入了两个评分,两个评分都有不同的值。您收到的评分为
零DivisionError
,它看起来像是
评级。size
在某种程度上是0,即使您已经手动添加了两个评级。为什么不尝试将
评级。size
替换为
1
,然后查看?或者注释掉该行并执行
评级。检查
?如果我将ratings.size替换为1,则页面加载时没有星星(我的视图中有javascript)。如果我注释掉行并键入ratings.inspect,那么它将再次加载页面,视图中没有星星
#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
<script> #did not delete this line
  $('#star').raty({
    readOnly: true,
    score: <%= @review.average_rating %>,
    path: '/assets'
  });