إرسال كتلة رمز إلى طريقة 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
أي دليل آخر أو طريقة أفضل للقيام بذلك سيكون موضع تقدير كبير.
المحلول
قدم القضبان 2.3 find_in_batches
و find_each
الطرق (انظر هنا) لمعالجة الدُفعات للعديد من السجلات.
وبالتالي يمكنك القيام بأشياء مثل:
Person.find_each(:conditions => "age > 21") do |person|
person.party_all_night!
end
نصائح أخرى
انا استعمل ال .each
الطريقة التي توفرها مثل
@products = Product.find_all_by_ids(ids, .....)
@products.each { |p| p.stock += 10 }
هناك حتى بعض الامتدادات لتعداد يوفر هذا القضبان أن يساعدك قليلاً إذا كنت تفعل بعض الأشياء الشائعة.
أيضًا ، لا تنسَ حفظ الأشياء الخاصة بك بشيء مثل p.save
إذا كنت تريد أن تستمر التغييرات بالفعل.
ما المشكلة في ذلك:
@products = Product.find_all_by_ids(ids).each do |p|
p.stock+=10
end
في حال لم تكن تعرف ، تم إرجاع الصفيف الذي تم نقله إليه.