Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 作为一对多且只有一个选项的votable_Ruby On Rails 3_Activerecord_Gem - Fatal编程技术网

Ruby on rails 3 作为一对多且只有一个选项的votable

Ruby on rails 3 作为一对多且只有一个选项的votable,ruby-on-rails-3,activerecord,gem,Ruby On Rails 3,Activerecord,Gem,我正试图弄清楚如何与acts_as_votable gem合作,实现一对多关系的投票系统。我有AgendaItem模型,它有许多结论项结论s可由用户投票,但他们只能投票给一个。如果他们投票赞成第二个结论,就需要改变他们的投票 是否有任何方法可以在不手动检查用户是否已经投票给结论对象的情况下实现此功能?文档似乎只涉及对单个对象的投票,而没有涉及类似的场景,除非我遗漏了一些内容您可能希望尝试修补ActsAsVotable::Vote以包含投票 module ActsAsVotable class

我正试图弄清楚如何与acts_as_votable gem合作,实现一对多关系的投票系统。我有
AgendaItem
模型,它有许多
结论
项<代码>结论s可由用户投票,但他们只能投票给一个。如果他们投票赞成第二个结论,就需要改变他们的投票


是否有任何方法可以在不手动检查用户是否已经投票给
结论
对象的情况下实现此功能?文档似乎只涉及对单个对象的投票,而没有涉及类似的场景,除非我遗漏了一些内容

您可能希望尝试修补
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
模块动作表
班级投票<::ActiveRecord::Base
验证:投票者id,作用域:[:可投票者id]的唯一性,
if:Proc.new{| vote | vote.votable_type==“结论”&&vote.voter_type==“用户”}
结束
结束

您需要在数据库上的:votable_type、:voter_type、:votable_id和:voter_id上添加唯一索引,以将性能损失降至最低。

Ah这很有意义。还有没有一种快速的方法可以简单地将选票从一张改为另一张,而不必每次都检查?我想我必须自己实现?你可以像往常一样调用
User#vote#u up
User#vote#u down
。这些方法调用
Votable#vote
,检查现有投票并相应地更新投票标志。我已经将该模块添加到我的lib目录中(我在初始值设定项中有一个require语句),但是当我检查投票模型的验证器时,该模块似乎没有被添加?你明白了吗?我正试图完成同样的事情,却没有运气。。。