将代码块发送到find_all动态方法

时间:2009-10-21 23:20:16

标签: ruby-on-rails find

我正在使用动态find_all方法处理一些复杂的查询,并且达到了向该find_all方法发送块将真正简化我的代码的程度。

是否有任何插件或工作正在处理此问题?

简单来说,我想做类似的事情:

@products = Product.find_all_by_ids(ids, .....) do |p|
            # do something to each product like      
            p.stock += 10
          end

非常感谢任何其他指南或更好的方法。

3 个答案:

答案 0 :(得分:3)

Rails 2.3引入了find_in_batchesfind_each方法(请参阅here)以批量处理许多记录。

你可以这样做:

  Person.find_each(:conditions => "age > 21") do |person|
    person.party_all_night!
  end

答案 1 :(得分:2)

我使用Enumerable提供的.each方法

@products = Product.find_all_by_ids(ids, .....)
@products.each { |p| p.stock += 10 } 

如果你正在做一些常见的事情,Rails提供的甚至还有一些extensions to Enumerable可能对你有所帮助。

另外,如果您希望更改实际持续存在,请不要忘记使用p.save之类的内容保存对象。

答案 2 :(得分:0)

这有什么问题:

@products = Product.find_all_by_ids(ids).each do |p| 
  p.stock+=10
 end

如果您不知道,每个都返回传递给它的数组。