如何使用偏移和限制在数据库中插入数据

时间:2017-05-18 18:55:15

标签: ruby-on-rails ruby sqlite

我正在学习Ruby on Rails和SQlite。当我在寻找创建种子文件的方法时,我看到了种子文件的一些有趣的代码:

Classroom.all.each_with_index do |classroom, i|
  classroom.students << [Student.limit(8).offset(i*2)]
end

我知道它是在课堂上插入学生但不了解limitoffset正在做什么。

我尝试在线搜索并发现https://apidock.com/rails/ActiveRecord/QueryMethods/offset,但它并没有让我明白。

有关资源的任何建议,我可以在这个或任何可以帮助我理解这个的例子中找到更多信息吗?

1 个答案:

答案 0 :(得分:1)

当然(详见http://guides.rubyonrails.org/active_record_querying.html

Student表示从Student表中获取 all 行的SQL查询。

limitoffset等每个方法正在做的是修改Rails正在构建的基础SQL查询。

limit(8)表示只获得8件商品。

offset(i*2)表示开始将i * 2个元素放在列表中。

如果它只是一个数组(而不是数据库表),那就像说

student[i*2..i*2+8-1]

注意我想知道这段代码是否有错误? offset(i*8)更有意义。然后,这段代码将由8名学生组成,并将他们分成不同的班级。

因为这将是前8名学生,将他们放在第一个教室,然后带3-10名学生并将他们放在下一堂课等,所以有些学生最多会有4个不同的班级!