在Rails中validation多个选择以进行首选项投票

我正在尝试创建一个页面,用户可以选择按照他们选择的顺序选择投票。

有一些动态可供选择的选项,例如,可能有三个选项可供选择[苹果,香蕉,橙子],因此每个选项都有一个选择,每个选择有三个优先顺序值[1] ,2,3]。

结果集可能类似于:

[apples,2],[bananas,3],[oranges,1] 

而且我最终会操纵它,以便我将[oranges,apples,bananas]放在一个数组中。

如何validation是否已选择所有选项,并且可以看到它们是有序的?

我是否需要通过循环传递数据,该循环按所选择的首选项对其进行排序,然后计算是否缺少首选项?

或者我错过了一个已经做到这一点的精彩插件?

这将进行validation,并检查是否有精确的1, 2, 3和其他人的投票。

 s = [[:apples,2],[:bananas,3],[:oranges,1]] s.map(&:last).sort == (1..3).to_a 

要获取已排序的数组,请使用以下命令:

 s.sort{|a,b| a.last <=> b.last}.map(&:first) 

编辑(解释):第一个块通过提取数组中每个数组的第二项来工作,然后检查它是否等于范围1..3 。 这validation了每个项目的唯一性和存在性。 要使用它来validationrails,您需要一个自定义validation器。

对于自定义validation器(品尝季节):

 validate :valid_votes? def valid_votes? unless votes.map(&:last).sort == (1..3).to_a errors.add(:votes, 'are missing, duplicated or invalid') end end