Ruby on rails 验证Rails中偏好投票的多个选择
我正在尝试创建一个页面,用户可以在其中按照他们选择的顺序对某些项目进行投票 有大量的选项可供选择,例如,可能有三个选项可供选择[苹果、香蕉、橙子],因此每个选项都有一个选择,每个选择都有三个优先顺序值[1,2,3] 结果集可能类似于:Ruby on rails 验证Rails中偏好投票的多个选择,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在尝试创建一个页面,用户可以在其中按照他们选择的顺序对某些项目进行投票 有大量的选项可供选择,例如,可能有三个选项可供选择[苹果、香蕉、橙子],因此每个选项都有一个选择,每个选择都有三个优先顺序值[1,2,3] 结果集可能类似于: [apples,2],[bananas,3],[oranges,1] 我最终会处理它,这样我就有了[橙子,苹果,香蕉]在一个数组中 我如何验证所有选项都已选择,并且可以看到它们是有序的 我是否需要通过一个循环传递数据,该循环按所选的首选项对数据进行排序,然后计数
[apples,2],[bananas,3],[oranges,1]
我最终会处理它,这样我就有了[橙子,苹果,香蕉]
在一个数组中
我如何验证所有选项都已选择,并且可以看到它们是有序的
我是否需要通过一个循环传递数据,该循环按所选的首选项对数据进行排序,然后计数以查看是否缺少首选项
或者我错过了一个已经完成这项工作的优秀插件吗?这将进行验证,并检查是否有投票支持
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)
那看起来很有趣,你能解释一下吗?我该如何使用你提到的代码进行验证呢?哇,谢谢彼得-这真是太棒了!我猜我可以将预期数组的长度作为参数传递给验证?每次用户有选择时,选项的数量可能会有所不同。您完全可以传入参数(任何时候看到3,都可以替换为n)。
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