質問

動的find_allメソッドを使用していくつかの複雑なクエリを処理しており、そのfind_allメソッドにブロックを送信するとコードが本当に単純化されるようになりました。

これを処理するプラグインまたは進行中の作業はありますか?

簡単に言えば、次のようなことをしたいです。

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

他のガイドまたはこれを行うためのより良い方法は大歓迎です。

役に立ちましたか?

解決

Rails 2.3では、 find_in_batches および find_each メソッドが導入されました(こちら)で多数のレコードをバッチ処理します。

こうして、次のようなことができます:

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

他のヒント

Enumerableが提供する .each メソッドを使用します

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

Railsが提供する Enumerableの拡張もあります。あなたがいくつかの一般的なことをしているなら少し。

また、変更を実際に保持する場合は、 p.save のようなものでオブジェクトを保存することを忘れないでください。

これの何が問題なのか:

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

知らない場合は、それぞれが渡された配列を返します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top