2017-07-07 69 views
3

我使用thumbs_up gem在我的應用中允許「喜歡」。允許用戶使用Rails中的thumbs_up gem'切換'up_vote和down_vote

寶石包括該代碼,以確保一個用戶不能兩次投票 -

Code '1' 
# Comment out the line below to allow multiple votes per user. 
validates_uniqueness_of :voteable_id, :scope => [:voteable_type, :voter_type, :voter_id] 

但我希望我的用戶能夠「up_vote」一次,然後「down_vote」如果他們碰巧喜歡通過錯誤(爲了用戶體驗)。我試圖將範圍更改爲:

validates_uniqueness_of :voteable_id, :scope => [:voteable_type] 

但是,這將允許用戶'up_vote'連續兩次。相反,如果可投票對象已經'up_vote',用戶應該只能'down_vote',反之亦然。

我能想到在我看來,使用條件這樣做,因爲這樣的:

<% if !current_user.voted_for?(voteable_name) %> 
    <%= link_to('Like', vote_up_question_answer_path(voteable_name), :method => :post) %> 
<% else %> 
    <br> 
    <%= link_to('Unlike', vote_down_question_answer_path(voteable_name), :method => :post) %> 
<% end %> 

而且註釋掉碼「1」,但有沒有更好的辦法,使用戶僅允許「切換'通過控制器的投票之間?

謝謝。

+1

爲什麼不檢查gem acts_as_votable它具有內置的功能,它也支持加權投票。 –

+0

@CoreyGibson謝謝,我也瀏覽過那個寶石,我想我會在閱讀完寶寶之後再進行切換(寶石最近出現了另一個錯誤)。 :) – sofarsophie

回答

1

應該在應用程序代碼中實現翻轉而不是改變庫的現有行爲。

+0

感謝您的答案。在那種情況下,我是否需要允許選民多次投票,然後在應用中實施條件? – sofarsophie

+0

你想對第二個要求做什麼@sofarsophie你想編輯現有的投票而不是創建一個新的投票。但是,這個問題有更好的寶石。 –

+0

@ ThomasR.Koll對,好吧我想我可以試試看。你有任何關於我可以使用的替代寶石的建議嗎(你也指的是acts_as_votable嗎?)?當我重新啓動我的服務器時,這個優點寶石有一個無法解決的問題,顯然還在修復中......我想我會換一個新的。 – sofarsophie