【问题标题】:star rating rails 4 jquery ajax javascript raty星级 Rails 4 jquery ajax javascript rate
【发布时间】: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


【解决方案1】:

基本上,我很想获得更多信息,但这里有一些可能会有所帮助的建议:

  • 确保关系正常:确保用户/评论有has_many :ratings,评级有'belongs_to :user/:review'。其他方向-您是否以控制器方法获得评级?如果是这样,请考虑将其更改为 @ratings。
  • 使用 first_or_XXXX - 这是保存条件实例化的一个很好的 rails 选项。有 first_or_create 会做你所做的事情:

Rating.where(review_id: @review.id, user_id: @current_user.id).first_or_create do |rating| rating.score = 0 end

  • 最后,ratings.size,创建后不会更新,这可能解释了零划分。在this question's selected answer and comments 中阅读更多内容。因此,建议使用 count(将检查数据库,因此只计算已保存的评分)或 length(即 user/review.ratings.length 也会计算已构建(未保存)的对象。

希望有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    相关资源
    最近更新 更多