Отправка блока кода в динамический метод 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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top