我在铁轨上有两张桌子。
pending_products
processed_products
在待定产品中有一个状态字段.. 将记录添加到挂起表(或更新)时,状态将设置为1。 当我想要处理时,我将所有1改为2,然后选择所有的2。 当我完成所有记录后,我将所有的2改为1000 ..(似乎是一个很好的数字说完)。
(如果你想知道我为什么设置为2,那么如果在我处理时进给它就不会更新该记录,因为状态会被Feed设置为1) / p>
在我将所有2改为1000之前,我想插入已处理的表格。
现在我可以在纯SQL中执行“插入”,但我想知道是否有一种方法可以做到这一点。比原始SQL更优雅。
答案 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更“优雅”,但它保证会更慢。