当我使用increment_counter递增一些整数列并传递一些记录ID然后尝试使用Model.first获取第一条记录时,这将返回记录ID加1。
这样的事情:
Model.increment_counter :field, id
Model.first
不返回
Model.find(1)
但
Model.find(id+1)
这是postgreSQL的一些特殊问题吗?
答案 0 :(得分:6)
Model.first
将使用您的数据库的默认排序(不必然是ID)。
请改为尝试:
Model.order("id").first
答案 1 :(得分:0)
您可以对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"
不要先调用 和 all ,因为它会在其他查询中生成错误,例如User.order(:email).limit(1)it将与User.order(:email).first不同,在这种情况下,因为它将按ID重新排序项目, 我没有在posgresql中找到其他有问题的方法,我尝试通过更改表格pkey来修复它,但不是运气那里