2009-10-21 3 views
0

Я работаю с некоторыми сложными запросами с помощью динамического метода find_all и дошел до точки, где отправка блока в этот метод find_all действительно упростит мой код.Отправка кода в динамический метод find_all

Есть ли какой-либо плагин или работа в процессе работы с этим?

Проще говоря, я хотел бы сделать что-то вроде:

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

Любого другого руководства или лучшего способа сделать это было бы весьма признателен.

ответ

3

Rails 2.3 представил методы find_in_batches и find_each (см. here) для пакетной обработки многих записей.

, таким образом, Вы можете сделать такие вещи, как:

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

Приятная находка, я прочитал об этом раньше, но не вспомнил об этом. Благодаря! – Yaraher

2

Я использую метод .each который Enumerable обеспечивает как

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

Есть даже некоторые extensions to Enumerable, что Rails предусматривает, что может помочь вам немного, если вы делаете некоторые общие вещи.

Кроме того, не забудьте сохранить свои объекты с чем-то вроде p.save, если вы хотите, чтобы изменения действительно сохранялись.

+0

Спасибо, но это фактический подход, который я использовал. Тем не менее, моя забота заключалась в том, чтобы задаться вопросом, есть ли способ отправить ему блок для выполнения таких расчетов. Использование двух заявлений показалось немного сильным – Yaraher

0

Что случилось с этим:

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

В случае, если вы не знаете, каждый возвращает массив, переданный ему.

 Смежные вопросы

  • Нет связанных вопросов^_^