Итак, я реализовал систему голосования, и, на мой взгляд, где я печатаю video.vote_sum
, значение для одного из видеоизображений voice_sum отображается как 1. Однако, когда я запускаю Video.find(450)
в своей консоли, я вижу, что элементна самом деле есть элемент voice_sum, равный двум.Я не уверен, почему это происходит, и хотя голосование работает должным образом, при перезагрузке страницы метод pluralize
, на мой взгляд, отображает «1 голос».Но это только после перезагрузки страницы.Когда я голосую, отображается «1 голос».Странно.
Вот метод create в контроллере video_votes:
def create
@video = Video.find(params[:video_id])
@vote = current_user.video_votes.find_or_create_by_video_id(@video.id)
if @vote.value.nil?
if params[:type] == "up"
@vote.value = 1
else
@vote.value = -1
end
elsif (params[:type] == "up" && @vote.value == 1) || (params[:type] == "down" && @vote.value == -1)
@vote.value = 0
elsif ((params[:type] == "up" && @vote.value == -1) || (params[:type] == "down" && @vote.value == 1)) || (@vote.value == 0)
if params[:type] == "up"
@vote.value = 1
else
@vote.value = -1
end
end
if @vote.save
respond_to do |format|
format.html { redirect_to @video }
format.js
end
else
respond_to do |format|
format.html { redirect_to @video }
format.js {render 'fail_create.js.erb'}
end
end
end
Вот соответствующий код в моей модели видео:
def vote_sum
video_votes.sum(:value)
end
А вот соответствующий код вмоя модель video_vote:
after_update :update_vote_sum
private
def update_vote_sum
video.update_attributes!(:vote_sum => video.vote_sum + value)
end
Почему это происходит и как я могу это исправить?