find_all動的メソッドへのコードブロックの送信
-
05-07-2019 - |
質問
動的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
知らない場合は、それぞれが渡された配列を返します。
所属していません StackOverflow