在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