Отправка блока кода в динамический метод find_all - PullRequest
0 голосов
/ 22 октября 2009

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

Есть ли какой-нибудь плагин или работа над этим?

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

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

Любая другая инструкция или лучший способ сделать это будет принята с благодарностью.

Ответы [ 3 ]

3 голосов
/ 22 октября 2009

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

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

  Person.find_each(:conditions => "age > 21") do |person|
    person.party_all_night!
  end
2 голосов
/ 22 октября 2009

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

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

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

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

0 голосов
/ 22 октября 2009

Что не так с этим:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...