2010-01-23 72 views
2

我在博客模型中設置了簡單的評分系統。我使用自定義方法來提高評分,這在博客數據庫中是整數。阻止用戶在Rails中多次投票

def increase 
    @post = Post.find(params[:id]).increment!(:rating) 
    if logged_in? 
    current_user.increment!(:votes) 
    end 
    flash[:notice] = "Thanks for rating" 
    redirect_to posts_url 
end 

現在,我可以根據自己的意願多次投票,這當然是一場災難。用戶可以多次進行投票,並可以繼續進行計數。

如何使投票提交按鈕在提交一次後就會消失。我想爲評分和使用自定義令牌製作單獨的模型,但對於簡單的應用程序來說似乎不必要的複雜。

任何幫助?

塞特希

回答

1

這樣做的一種方法是讓您的Post模型和一個RatedPost模型。 RatedPost模型可能包含如 incremented:boolean,decremented:boolean, changed_by:integer (user_id), post_id:integer的信息。

然後,您可以確定RatedPost.find_by_post_id_and_changed_by(post.id, user.id)是否返回任何記錄。

您還可以識別點是增加還是減少。因此,您可以允許用戶在一段時間內(例如24小時)更改其投票。

1

您也需要保持與用戶列表誰在一個特定的主題/後投票或你需要保持連接到包含用戶投票職位每個用戶的列表。無論您是將信息與帖子還是用戶一起存儲,都是您的選擇,並且可能取決於您的應用程序要求。

當顯示包含投票按鈕的頁面時,您必須檢查current_user是否已投票。如果已經投了票,不要顯示按鈕。出於安全原因,您可能還需要檢查用戶是否投了上面顯示的代碼,以防止不使用按鈕進行投票。

如果你還允許沒有登錄的人投票,你需要存儲他們的IP地址或其他東西。