星级评分栏4 jquery ajax javascript raty

时间:2014-01-08 20:29:22

标签: javascript jquery ruby-on-rails ajax raty

我正在尝试按照本教程操作而陷入困境: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'
  });

删除部分^^^

1 个答案:

答案 0 :(得分:0)

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

  • 确保关系正常:确保您为用户/评论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(将检查数据库,因此只计算已保存的评级)或长度(即user / review.ratings.length,它还将计算已构建(未保存)的对象。
希望有所帮助。