ruby-on-rails 需要帮助!Rails ActiveRecord在find_each中找不到主键(ID

oknwwptz  于 2023-01-14  发布在  Ruby
关注(0)|答案(1)|浏览(138)

我有一些代码,神奇地停止工作(没有代码被推)!
我有一个函数,每晚都会被调用来收取订阅费,调用的函数如下:

def cycle_subscriptions( async = true )
  Subscriptions::Subscription.ready_to_cycle.find_each do |s|
    if async
      CycleSubscriptionBillingPeriodWorker.perform_async( s.id )
    else
      s.cycle_billing_period!
    end
  end
end

ready_to_charge通过以下方式创建一些作用域:

scope :cycleable, ->{ where.not(status: [self.statuses[:suspended], self.statuses[:suspended_payment_failed], self.statuses[:cancelled], self.statuses[:cancelled_payment_failed], self.statuses[:trial_expired]]) }

scope :ready_to_cycle, ->{ cycleable.where( "next_bill_date < ?", Time.now ) }

这将在本地创建如下查询:

SELECT  "subscriptions_subscriptions".* FROM "subscriptions_subscriptions" WHERE ("subscriptions_subscriptions"."status" NOT IN (1, 5, 2, 8, 7)) AND (next_bill_date < '2023-01-13 16:40:05.365004')  ORDER BY "subscriptions_subscriptions"."id" ASC LIMIT 1000

但是,在服务器上,它会创建以下查询:

SELECT  "subscriptions_subscriptions".* FROM "subscriptions_subscriptions" WHERE ("subscriptions_subscriptions"."status" NOT IN (1, 5, 2, 8, 7)) AND (next_bill_date < '2023-01-13 16:59:49.014069')  ORDER BY "subscriptions_subscriptions"."" ASC LIMIT 1000

注意ORDER BY "subscriptions_subscriptions"."" ASC中缺少id,我相信find_each是该子句的附加内容。
为什么不添加主键字段到查询中?我很失落,很高兴能分享任何信息,我可以帮助解决这个问题。

qyzbxkaa

qyzbxkaa1#

答案:看起来好像有人从数据库中删除了id列的pkey和index(不是列本身)。我运行了ALTER TABLE collections ADD PRIMARY KEY (id),让一切恢复正常。看起来我现在可以和人交谈了--不知道这是怎么发生的。

相关问题