gpt4 book ai didi

javascript - 星级评定 Rails 4 jquery ajax javascriptraty

转载 作者:行者123 更新时间:2023-11-28 08:36:58 26 4
gpt4 key购买 nike

我正在尝试遵循本教程,但遇到了困难: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(我的是在评论模型中),我不确定为什么要这样做。

我还添加了这个(不确定它是否属于当前 Controller 或是否属于评级 Controller ):

#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 的 View 中删除此脚本时,星星会显示my_ rating。所以平均部分有些困惑:

<script> #did not delete this line
$('#star').raty({
readOnly: true,
score: <%= @review.average_rating %>,
path: '/assets'
});

删除部分^^^

最佳答案

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

  • 确保关系有效:确保您有用于用户/评论的 has_many : ratings 和用于评分的“belongs_to :user/:review”。其他方向-您是否以 Controller 方法获得评级?如果是这样,请考虑将其更改为@ ratings。
  • 使用first_or_XXXX - 这是保存条件实例化的绝佳 Rails 选项。有first_or_create这将完全按照你所做的那样:

Rating.where(review_id: @review.id, user_id: @current_user.id).first_or_create 做 |Rating|
评分.score = 0
结束

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

希望有帮助。

关于javascript - 星级评定 Rails 4 jquery ajax javascriptraty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21005833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com