所以我将书中的段落导入我的应用程序。我给出了一本书中所有段落的段落。即Passage.all
我有很多书,所以我也有一本班级书。因此,当我从一本书中找到所有段落时,我称之为:
Passage.where(book_id: self.book_id)
当我使用where方法时,它是否保留了“自然顺序”,Passage.all通常会返回。如果没有,我可以将代码更改为:
Passage.where(book_id: self.book_id).order("created_at ASC")
无论如何,我接着写下这段代码:
a = Passage.where(book_id: self.book_id)
b = a.index(self)+1
self.passage_number = b
[第一行:返回书中的所有段落]
[第二行:在数组中返回它们的数字+ 1来代表0起始值的东西(原谅白话)]
[第三行:将索引值分配给段号]
最终,我试图计算段落数,而不必硬编码。
那我的问题是什么?现在我得到三段#3,两段#4。我的最后一段是:
Passage.last.passage_number = 217
Passage.where(book_id: 5).count = 241
它正在跳过数字并错误地编制索引,因此我认为我需要编写更好的方法!在这种情况下索引数组的更好方法是什么?
答案 0 :(得分:2)
没有“自然顺序”这样的东西:没有订单条款Passage.all
可以按照数据库想要的任何顺序返回内容(这可能取决于磁盘上项目的位置,查询计划等)。
first
和last
方法的特殊之处在于,如果您的关系尚未对其应用订单,则按ID排序。
如果您需要特定订单中的内容,请添加订单子句。