إرسال كتلة رمز إلى طريقة find_all الديناميكية

StackOverflow https://stackoverflow.com/questions/1604191

  •  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

في حال لم تكن تعرف ، تم إرجاع الصفيف الذي تم نقله إليه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top