Ruby on rails 使用指定顺序的.sample

Ruby on rails 使用指定顺序的.sample,ruby-on-rails,ruby,arrays,ruby-on-rails-4,Ruby On Rails,Ruby,Arrays,Ruby On Rails 4,我设置了一个非常简单的种子文件来填充模型 year_group_array = ['Reception', 'Year 1', 'Year 2', 'Year 3', 'Year 4', 'Year 5', 'Year 6'] 6.times { year_group = YearGroup.create({ name: year_group_array.sample }) } 这将确保数组中的所有项都被填充,但不以任何顺序填充(理想情况下,我希望条目以它们在数组中出现的顺

我设置了一个非常简单的种子文件来填充模型

year_group_array = ['Reception', 'Year 1', 'Year 2', 'Year 3', 'Year 4', 'Year 5', 'Year 6']

6.times { 
  year_group = YearGroup.create({
    name: year_group_array.sample
  })
}
这将确保数组中的所有项都被填充,但不以任何顺序填充(理想情况下,我希望条目以它们在数组中出现的顺序排列),而且我正在硬编码循环必须运行的次数,如何使循环更具动态性,以便在数组中没有更多项时停止


我只是想让它执行得更好一点,这样,如果我将来向数组中添加任何内容,我就不必计算数组中的项数并设置迭代值。

将原始数组值绑定到输出的一种方法是只枚举原始数组

year_group_array = ['Reception', 'Year 1', 'Year 2', 'Year 3', 'Year 4', 'Year 5', 'Year 6']

year_group_array[0..5].each { |sample| YearGroup.create(name: sample) }
如果必须使用随机值:

LIMIT = 6
source = year_group_array[0..LIMIT].dup
year_group_array[0..LIMIT].each { |sample| YearGroup.create(name: source.delete(rand(LIMIT))) }

我相信这应该是答案。我的方法非常简单

year_group_array = ['Reception', 'Year 1', 'Year 2', 'Year 3', 'Year 4', 'Year 5', 'Year 6']

year_group_array.shuffle.each do |year|  
  year_group = YearGroup.create({
    name: year
  })
end

所以数组洗牌就可以了。它将随机化集合和集合中对象的索引/位置#每个将继续将它们收集到一个块中,不按顺序创建一条记录,并继续添加记录,除非所有记录都已创建。

为什么不试试:
year\u group\u数组[0..5]。每个{sample | YearGroup.create(name:sample)}
?您的权利,我试图把它复杂化,问一个愚蠢的问题,如果我错了,请纠正我,但仅仅索引一个范围不会对数组进行采样。Sample从数组中获取一个随机元素。你说得对,josh,sample确实从数组中提取了一个随机元素,但我的理解是,当与6.5倍相结合时,每个随机元素都是唯一的,从而确保数组中的每个记录都会插入到我的模型中