Pergunta

Estou trabalhando com algumas consultas complexas usando o método dinâmico find_all e cheguei a um ponto em que o envio de um bloco para esse método find_all realmente simplificaria meu código.

Existe algum plugin ou trabalho em andamento lidando com isso?

Em termos simples, gostaria de fazer algo como:

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

Qualquer outro guia ou melhor maneira de fazer isso seria muito apreciada.

Foi útil?

Solução

Rails 2.3 introduziu o find_in_batches e find_each Métodos (ver aqui) para o processamento em lote de muitos registros.

Você pode assim fazer coisas como:

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

Outras dicas

Eu uso o .each método que enumerável fornece como

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

Existem até alguns extensões para enumeráveis Esse Rails fornece que pode ajudá -lo um pouco se você estiver fazendo algumas coisas comuns.

Além disso, não se esqueça de salvar seus objetos com algo como p.save Se você deseja que as alterações realmente persistam.

O que há de errado com isso:

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

Caso você não soubesse, cada um retorna a matriz passou para ela.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top