2016-05-21 38 views
0

我使用功勳寶石信譽系統添加到我的應用程序爲登錄的用戶優異寶石 - 防止用戶投票不止一次

這是我如何使用score處理的例子。投票:

def initialize 
    score 5, on: 'posts#upvote', to: :user 
    score -5, on: 'posts#downvote', to: :user 
    score 1, on: 'posts#upvote', to: :itself 
    score -1, on: 'posts#downvote', to: :itself 
end 

問題是,用這個解決方案,用戶可以根據需要多次投票。我希望用戶每個帖子只有一次投票。有沒有辦法阻止用戶多次投票?

回答

0

您可以將一個塊傳遞給score以確定它是否應該允許。有關更多信息,請參閱Merit: Defining Rules

此代碼更新您已經提供給您可能是如何實現它在你的應用的例子是什麼:

def initialize 
    score 5, on: 'posts#upvote', to: :user {|topic| topic.voted?(@user) } 
    score -5, on: 'posts#downvote', to: :user {|topic| topic.voted?(@user) } 
    score 1, on: 'posts#upvote', to: :itself {|topic| topic.voted?(@user) } 
    score -1, on: 'posts#downvote', to: :itself {|topic| topic.voted?(@user) } 
end 

這是假設你有(或建立)一種方法來確定用戶是否具有已經就一個話題投了票。在這種情況下,該方法是voted?關於您允許投票的主題。

如果你想允許用戶只投一次,但爲了反轉以前投票(如SO允許),你也可以在塊中處理。條件評估條件的複雜性完全取決於您。

+0

@Sajjad如果已回答您的問題,請點擊答案旁邊的複選標記以接受它。複選標記會將顏色更改爲綠色。 Upvotes也是非常值得讚賞的。 :d –