2010-09-13 113 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等
  • 允许任何模型来投票。换句话说,投票不必来自用户,他们可以来自任何模型(例如团队或团队)。
  • 提供易于编写/读取的语法。