私はこのチュートリアルに従おうとしていますが、私は立ち往生しています: 5 つ星評価機能を Rails 4 モデルに追加します。
javascript と ajax の初心者なので、javascript で ajax がどのように機能するかを数時間学習しました。問題はメソッドがどこにあるかに関係していると思いますaverage_rating
(レールの問題?)。
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'
});
一部削除しました^^