使用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修复它,但不是运气那里