2010-10-08 3 views

Répondre

1

Cette recherche va être extrêmement inefficace. Si vous envisagez de faire beaucoup de recherches d'e-mails, il peut être prudent d'ajouter une colonne indexée pour stocker l'e-mail dans votre tableau.

Je suppose que contents est un champ de texte pour stocker un hachage sérialisé. Les hachages sont sérialisés en utilisant le format YAML, qui est en texte brut. Vous pouvez donc effectuer les recherches de caractères génériques sur la colonne content.

Par exemple: Un hachage comme illustré ci-dessous

{"email" => "[email protected]"} 

est sérialisé pour chaîne

"--- \nemail: [email protected]\n" 

Vous pouvez écrire simple matcher comme suit:

Email.all(:conditions => ["content LIKE ? ", "%email: #{email}%"]) 

Si vous envisagent d'interroger plusieurs champs dynamiques puis,

class Email < ActiveRecord::Base 
    def self.find_all_by_dynamic(hash) 
    ca = hash.map {|k, v| ["contents LIKE ?", "%#{k}: #{v}%"]}.transpose 
    Email.all(:conditions => [ca[0].join(" AND "), *ca[1]]) 
    end 
end 

Maintenant, vous pouvez utiliser la nouvelle méthode comme:

Email.find_all_by_dynamic(:email => "[email protected]", :zip => 94307) 
+0

Thanx KandadaBoggu. Il devrait y avoir hash.map au lieu de map uniquement. – a5his

Questions connexes