从ruby中的更新获取更改的记录

时间:2014-05-02 07:24:37

标签: ruby rails-activerecord

在postgresql中可以使用

update products set status = 1 
where status <> 1 and updated_at < '2014-04-01'
returning id;

这是最方便的,因为我得到了我刚刚更新的所有记录的ID。

有没有办法在活动记录中执行此操作?
我正在努力(非常努力)成为一个红宝石的家伙 我在这样的情况下发现漏洞抽象有点困难。

我知道update_all会返回计数 是否有允许返回的调用?

2 个答案:

答案 0 :(得分:1)

对于Rails 4:

Product.where('updated_at < ? and not status = ?', '2014-04-01', 1).map do |product|
  product.update_attribute(:status, 1)
  product.id
end

答案 1 :(得分:0)

对于 Rails&lt; 4 ,您可以编写类似这样的内容

Product.where('updated_at < ? and status != ?', '2014-04-01', 1).map do |product|
product.update_attribute(:status, 1)
product.id

Product.where('updated_at < ? and status NOT IN (?)', '2014-04-01', 1).map do |product|
product.update_attribute(:status, 1)
product.id

Product.find(:all, :conditions => ['updated_at < ? and status NOT IN (?)', '2014-04-01', 1]).map do |product|
product.update_attribute(:status, 1)
product.id