【问题标题】:Non-Repeatable numbers into database - Ruby on Rails不可重复的数字进入数据库 - Ruby on Rails
【发布时间】:2025-12-19 05:35:11
【问题描述】:

假设我创建了一个用于测试目的的数据库,有没有办法可以将数据播种到列中,其中数字不同,例如在我的种子任务中:

10.times do
Post.create!(
  Start_Date: '' 
  End_Date: ''
  Number: "Random number from 1 to 10"
  )
end

数字是随机的还是从 1 到 10 的增量都没有关系,只要它是不可重复的。有没有可以做到这一点的宝石?

【问题讨论】:

  • 只需使用递增索引字段,如 ID 字段。您现在要求的是数据库的标准部分,因此您无需编写任何内容,只需定义该列类型即可。

标签: ruby-on-rails ruby database random generator


【解决方案1】:

只要你对序列 1..10 没问题,你就可以使用这个代码

10.times do |i|
  Post.create!(
    Start_Date: '' 
    End_Date: ''
    Number: i + 1
  )
end

如果你需要随机数:

(1..10).to_a.shuffle.each do |i|
  Post.create!(
    Start_Date: '' 
    End_Date: ''
    Number: i
  )
end

【讨论】:

    【解决方案2】:

    给你1-10范围内的随机数

      10.times do
        Post.create!(
          Start_Date: '' 
          End_Date: ''
          Number: rand(1..10)
          )
      end
    

    进行批量创建,因此只需发出一个查询即可全部创建。

    posts = []
    10.times do
      posts << {Start_date: '', End_Date: '', Number: rand(1..10)}
    end
    
    Post.create(posts)
    

    【讨论】: