0

我在 rails 有两个表..
pending_products
processes_products

在待处理产品中有一个状态字段。当一条记录被添加到待处理表(或更新)时,状态设置为 1。当我想处理时,我将所有 1 更改为 2,然后选择所有 2。当我处理完所有记录后,我将所有 2 更改为 1000 ..(似乎是一个不错的数字可以说完成了)。

(如果您想知道为什么我设置为 2,那么如果在我处理时有提要进入,它不会更新该记录,因为提要已将状态设置为 1)

在将所有 2 更改为 1000 之前,我想插入到已处理的表中。

现在我可以在纯 SQL 中进行“插入”,但我想知道是否有 Rails 方法可以做到这一点。比原始 SQL 更优雅的东西。

4

1 回答 1

0

这样的事情可能对你有用:

class PendingProduct < ActiveRecord::Base
  OUTSTANDING = 1
  PROCESSING = 2
  PROCESSED = 1000

  scope :outstanding, where(status: OUTSTANDING)

  def process
    transaction do
      self.status = PROCESSING
      self.save!

      # do whatever processing you need to do...

      # ...then create your ProcessedProduct record...
      ProcessedProduct.create!( ... )

      # ...and finally update this PendingProduct
      self.status = PROCESSED
      self.save!
    end
  end
end

PendingProduct.outstanding.each(&:process)

这可以说比原始 SQL 更“优雅”,但它保证会更慢。

于 2012-07-06T02:48:58.617 回答