使用postgreSQL奇怪的行为增加计数器和rails"first"

Vin*_*ius 3 postgresql ruby-on-rails

当我使用increment_counter递增一些整数列并传递一些记录ID然后尝试使用Model.first获取第一个记录时,这将返回记录ID加1.

像这样的东西:

Model.increment_counter :field, id
Model.first
Run Code Online (Sandbox Code Playgroud)

它不会返回

Model.find(1)
Run Code Online (Sandbox Code Playgroud)

Model.find(id+1)
Run Code Online (Sandbox Code Playgroud)

这是postgreSQL的一些特殊问题吗?

Dyl*_*kow 6

Model.first会使用你的数据库的默认排序(这是没有必要的ID).

试试这个:

Model.order("id").first
Run Code Online (Sandbox Code Playgroud)

  • 根据PostgreSQL的文档,"如果未选择排序,则将以未指定的顺序返回行".我认为在实践中它们将按照它们的创建顺序返回(不是通过ID,但如果你从不改变ID,它通常会是相同的).所以每当你需要确保它们按ID排序时,你必须调用`order("id")`. (6认同)