使用postgreSQL奇怪行为增加计数器和rails“first”

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

像这样的东西:

Model.increment_counter :field, id Model.first 

它返回的不是

 Model.find(1) 

 Model.find(id+1) 

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

Model.first将使用数据库的默认排序(不一定是id)。

试试这个:

 Model.order("id").first 

你可以做一些猴子补丁到ActiveRecord,

 #lib/postgresql_extras.rb module ActiveRecord class Base def self.first_by_id order(:id).first end def self.all_by_id order(:id) end end end 

并在一些初始化程序中要求这个

 #config/initializer/extensions.rb require "postgresql_extras" 

不要调用这些,因为它会在其他查询中产生错误,例如User.order(:email).limit(1)它将与User.order(:email)不同。在这种情况下,首先,因为它将通过id重新排序项目,我没有在posgresql中找到其他有问题的方法,我尝试通过更改表格pkey修复它,但不是运气那里