2016-09-23 1 views
2

J'ai écrit une migration assez costaude. Elle doit parcourir plusieurs collections, puis faire un find_or_intialize_by Je le fais en une seule transaction et cela prend plus de 80 secondes pour exécuter la requête . Je veux maintenant essayer d'accélérer cela en utilisant find_each.Rails Clé inconnue:: conditions. Les clés valides sont les suivantes:: start,: batch_size

ActiveRecord::Base.transaction do 
    StudentApplication.find_each(:conditions => "force_review is true") do |app| 
    .... 
    end 
end 

Je reçois les éléments suivants:

== 20160920133013 MoveForceReviewFieldsToCcSubmission: migrating ============== 
rake aborted! 
StandardError: An error has occurred, this and all later migrations canceled: 

Unknown key: :conditions. Valid keys are: :start, :batch_size/Users/Nexus/Work/prodigy/db/migrate/20160920133013_move_force_review_fields_to_cc_submission.rb:4:in `block in change' 
/Users/Nexus/Work/prodigy/db/migrate/20160920133013_move_force_review_fields_to_cc_submission.rb:3:in `change' 
/Users/Nexus/.rbenv/versions/2.3.0/bin/bundle:23:in `load' 
/Users/Nexus/.rbenv/versions/2.3.0/bin/bundle:23:in `<main>' 
ArgumentError: Unknown key: :conditions. Valid keys are: :start, :batch_size 

En regardant this tutorial around en utilisant find_each, je vois qu'il faut un argument de hachage qui vous permet de spécifier une condition à la requête, je voulais profiter de que pour filtrer les résultats avant d'exécuter le find_each.

nous utilisons Rails 4.1.14.2 et ruby 2.3.0p0, cette option a-t-elle été abandonnée? Ou est-ce que je fais quelque chose de mal?

Répondre

3

Le lien que vous fournissez est pour Rails 2.3.8. Vous pouvez voir le message que find_each est obsolète. Vous devez utiliser le lien this.
Comme vous pouvez le voir il n'y a pas de clé conditions c'est pourquoi vous obtenez l'erreur.

3

Vous pouvez l'utiliser comme ceci

StudentApplication.where(force_review: true).find_each do |app| 
    .... 
end