2011-07-05 6 views
0

Je développe une application Rails 3 (qui agit comme une API) et j'autorise personnes à envoyer un tas d'adresse e-mail (via une application iPhone) puis automatiquement rechercher dans la base de données pour faire correspondre membres (par courriel).Rails 3. Requête distincte

Cela fonctionne maintenant (sous le code) mais renvoie des doubles si l'utilisateur envoie plus d'une copie de chaque email.

@users = @emails.find_all {|profile| User.find_by_email(profile['email']) } 

Je souhaite que l'API renvoie uniquement une copie unique de l'utilisateur si elle est trouvée. J'ai essayé le code ci-dessous, mais cela ne fonctionne pas.

@users = @emails.find_all {|profile| User.select('DISTINCT email').where("LOWER (email) = ?", "%#{profile['email']}%") } 

Comment la première ligne de code ci-dessus peut-elle être remplacée par une recherche distincte?

Reconnaissant pour toute contribution!

Répondre

0

Je prendrais un coup d'œil à

How do I get the unique elements from an array of hashes in Ruby?

a = [{:a => 1},{:a => 2}, {:a => 1}] 
a.inject([]) { |result,h| result << h unless result.include?(h); result } 
# this returns : [{:a=>1}, {:a=>2}] 

On dirait être ce dont vous avez besoin!

+0

Cela semble très intéressant. Comment puis-je transformer @users = @ emails.find_all {| profile | User.find_by_email (profile ['email'])} pour utiliser votre syntaxe? S'il vous plaît aider! –

+0

J'ai utilisé votre code pour "nettoyer" le hachage entrant de courriels et cela fonctionne très bien maintenant! Merci! –

+0

Content d'avoir aidé !! –