2010-09-13 112 views

回答

13

我建議創建likedislike選項通過承擔經典投票模型功能。

因此,您有Vote作爲UserVotable Item之間的連接表。

投票值可以作爲Vote.value + 1 =贊,Vote.value -1 =不喜歡,Vote.value =中立/未投票。

你對於自己可投票項目控制器可以是這樣的:

def like 
    get_vote 
    @vote.value += 1 unless @vote.value == 1 
    @vote.save 
    respond_to do |format| 
    format.html 
    format.js 
    end 
end 

def dislike 
    get_vote 
    @vote.value -= 1 unless @vote.value == -1 
    @vote.save 
    respond_to do |format| 
    format.html 
    format.js 
    end 
end 

private 

def get_vote 
    current_item = @item.detect{|r| r.id == params[:id].to_i} 
    @vote = current_item.votes.find_by_user_id(current_user.id) 
    unless @vote 
    @vote = Vote.create(:user_id => current_user.id, :value => 0) 
    current_item.votes << @vote 
    end 
end 

而且每個人的信息,這個問題不值得被否決。它完全有效。

+0

非常感謝!我會試試這個...... :) – Madhusudhan 2010-09-14 18:25:25

+0

祝你好運Madhusudhan :) – Trip 2010-09-14 18:32:26

-2

爲什麼不只是創建一個名爲like的新布爾字段?然後將其更新爲false對於不喜歡true對於。我懷疑你找到了這個功能的插件/創業板。

+0

凡將這個布爾領域去? – mark 2010-09-13 18:46:14

+0

在數據庫或課程 – Hugo 2010-09-13 19:22:21

+1

嗯,是的...我的觀點是它不會是一個布爾字段添加到現有表的情況下建議。使用user_id,likeable_id,可選多態likeable_type和布爾值字段將需要連接表。 – mark 2010-09-13 19:31:43

1

我沒有看到這個問題沒有錯。

上調投票仍然是評級。只使用兩顆星。 :)我似乎記得允許星號定義數的acts_as_rateable。

5

我知道的答案已經被接受,但我只是發現了一個名爲act_as_votable的寶石,可能適合你的需求:

充當可投票是一個Ruby寶石專門爲Rails/ActiveRecord的模式寫入。這種寶石的主要目標是:

  • 允許進行表決任何模型上,喜歡/不喜歡,給予好評/ downvote等
  • 允許任何模型來投票。換句話說,投票不必來自用戶,他們可以來自任何模型(例如團隊或團隊)。
  • 提供易於編寫/讀取的語法。