Rails–为每条记录分配一个订单号



所以我正在将一本书中的段落导入到我的应用程序中。我把一本书中的所有段落都交给全班同学。即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 

它是跳过数字和错误的索引,所以我认为我需要编码一个更好的方法!在这种情况下,对数组进行索引的更好方法是什么?

没有"自然顺序":如果没有order子句,Passage.all可以按照数据库想要的任何顺序返回内容(这可能取决于项目在磁盘上的位置、查询计划等)。

firstlast方法的特殊之处在于,如果您的关系尚未应用订单,它们将按id排序。

如果您需要按特定顺序排列的东西,请添加order子句。

最新更新