所以我實現了一個投票系統,並在我的視圖中打印video.vote_sum
,其中一個視頻的vote_sum的值顯示爲1.但是,當我在我的控制檯中運行Video.find(450)
,我看到這個元素實際上有兩個vote_sum。我不確定爲什麼會發生這種情況,雖然投票的效果應該如此,但當我重新加載頁面時,我的視圖中的pluralize
方法顯示「1票」。但這只是在頁面重新加載時。當我投票時,它顯示「1票」。奇怪的。數據庫值和值顯示在視圖中的奇怪差異
這裏是在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
爲什麼會發生這種情況,我該如何解決?
如果你有這個名字的模型字段,你如何計算'Video'中的'vote_sum'?你應該切換到計算選票的唯一方式 - 現在你從'video_vote'' after_update'更新一次,然後在'Video.vote_sum'中重新計算 - 這可能是唯一的麻煩。 – mpapis 2011-03-20 00:17:55
嗯,那我該如何解決? – 2011-03-20 00:22:34
首先嚐試玩具從'Video'中刪除'def vote_sum',如果我得到了它的話,'Video.vote_sum'將在我的答案中正確更新。 – mpapis 2011-03-20 00:25:23