acts_as_votable一对多,只有一个选项可投票

时间:2013-05-24 23:44:42

标签: ruby-on-rails-3 activerecord gem

我正在试图弄清楚如何使用acts_as_votable gem来实现具有一对多关系的投票系统。我有AgendaItem模型,其中包含许多Conclusion个项目。 Conclusion可以由用户投票,但他们只能投一票。如果他们投票给第二个结论,就需要改变他们的投票。

有没有办法实现这个,而无需手动检查用户是否已经投票选择conclusion对象?文档似乎只涵盖对单个对象的投票,并不包括类似于此的场景,除非我遗漏了某些内容

1 个答案:

答案 0 :(得分:0)

您可能希望尝试修补ActsAsVotable::Vote以包含uniqueness validation票数。

module ActsAsVotable
  class Vote < ::ActiveRecord::Base
    validates_uniqueness_of :voter_id, scope: [:votable_id],
      if: Proc.new { |vote| vote.votable_type == "Conclusion" && vote.voter_type == "User" }
  end
end

您需要在数据库上添加唯一索引:votable_type,:voter_type,:votable_id和:voter_id,以最大限度地降低性能损失。