2010-04-17 34 views
0

我已經使用Ruby on Rails創建了一個博客應用程序,其中包括對帖子進行投票的能力。用戶可以點擊投票,並在投票表中創建一條記錄。我現在試圖限制同一個人多次投票。通過post_id和ip_address驗證創建 - Ruby on Rails

class Post 
has_many :votes 
end 


class Vote 
belongs_to :post 
end 

當投票記錄我使用VotesController通過創建:POST_ID並在視圖中使用隱藏字段傳遞IP_ADDRESS(包括表決表)。我想知道是否有一種方法可以將驗證添加到投票模型中,以查看post_id是否具有與請求投票的人相匹配的ip_address。

我試着簡單地使用validates_uniqueness_of:ip_address但限制用戶在任何帖子上投票。我只想限制用戶在他們已經投票的特定帖子上進行投票。

有沒有辦法通過驗證來做到這一點?

回答

5

試試這個:

class Vote 
    belongs_to :post 
    validates_uniqueness_of :ip_address, :scope => [:post_id] 
end 

這將驗證獨特性問候後。用戶將無法爲相同的帖子投票兩次。

在其他消息 - 你可以從request.remote_ip獲得遠程IP地址。這是代理IP地址的包裝,因此您不必擔心HTTP_X_FORWARDED_FOR和類似的頭文件。

+0

完全相同,我將發佈但gr8風格。 1票優秀的答案。 – Salil 2010-04-17 04:58:38

+0

這樣做。非常感謝你。完善。 – bgadoci 2010-04-17 05:08:24