ActiveRecord#首先不返回真正的第一条记录

时间:2009-09-14 20:10:06

标签: ruby-on-rails

我遇到ActiveRecord的问题#第一次似乎没有一直返回第一条记录。

>> Package.first
=> #<Package id: 22, name: "Test Package 4", created_at: "2009-09-11 21:10:54", updated_at: "2009-09-11 21:12:43", image_file_name: "0600-Sponsor.jpg", image_content_type: "image/jpeg", image_file_size: 29433>

我真正希望看到的是:

>> Package.first(:order => :id)
=> #<Package id: 13, name: "Default Package", created_at: "2009-09-03 20:54:08", updated_at: "2009-09-10 20:27:25", image_file_name: "Screen_shot_2009-09-10_at_3.16.59_PM.png", image_content_type: "image/png", image_file_size: 79386>

有谁知道默认排序顺序是什么?我应该使用:order =&gt;创建default_scope吗? :ID?我甚至不确定如何在我的开发机器上重现这种行为。

3 个答案:

答案 0 :(得分:1)

当涉及到检索记录的顺序时,SQL不做任何保证(当然,除非给出ORDER BY关键字)。

答案 1 :(得分:1)

来自docs

“您可以将所有相同的参数传递给此方法[{1}}”

我建议按created_at排序,但不是id,如下:

find(:first)

答案 2 :(得分:1)

以上答案并非完全正确。 根据{{​​3}} 'first'将返回第一条记录,默认情况下按主键按升序排序。

话虽如此,我经历过,在使用复杂查询时,postgresql并不总是如此。例如,如果您事先对其进行排序或具有默认范围。

Cat.order('id desc').first

然后它不会按升序排列。 此外,如果您的模型的范围是另一个模型

Cat.families.first

也可以更改默认顺序。