2

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

有没有办法在不手动检查用户是否已经投票给一个conclusion对象的情况下实现这一点?该文档似乎仅涵盖对单个对象的投票,并且不涵盖与此类似的场景,除非我遗漏了某些东西

4

1 回答 1

0

您可能想尝试修补ActsAsVotable::Vote以包括投票的唯一性验证

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,以最大限度地减少性能损失。

于 2013-05-26T02:34:19.370 回答