将一个表的内容复制到另一个表中

时间:2012-07-06 02:22:09

标签: sql ruby-on-rails activerecord

我在铁轨上有两张桌子。
pending_products
processed_products

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

(如果你想知道我为什么设置为2,那么如果在我处理时进给它就不会更新该记录,因为状态会被Feed设置为1) / p>

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

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

1 个答案:

答案 0 :(得分: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更“优雅”,但它保证会更慢。