2010-11-13 3 views
0

Je travaille sur une application Rails où j'ai des utilisateurs qui peuvent s'ajouter comme amis. Maintenant j'essaye d'afficher certaines informations pour quand un utilisateur est déjà un ami d'un autre utilisateur. Je l'ai fait de la façon suivante:Trouver la correspondance du tableau

- @users.each do |user| 


- exists = false 
    - current_user.friends.each do |friend| 
    - if friend == user 
    - exists = true 

    - if !exists 
    = button_to 'Add Friend', friendships_path(:friend_id => user), :method => :post 
    - else 
    Already a friend 

Je pense que cette solution n'est pas agréable. Savez-vous comment je peux le faire d'une manière propre et plus efficace?

Répondre

2

Utilisez le nombre Enumerable #? méthode pour faire cela

- @users.each do |user| 
    - if current_user.friends.any?{ |friend| friend == user } 
    Already a friend 
    - else 
    = button_to 'Add Friend', friendships_path(:friend_id => user), :method => :post 

Comme expliquer dans le commentaire, le Enumerable # include? fonctionne aussi dans ce cas

- @users.each do |user| 
    - if current_user.friends.include?(user) 
    Already a friend 
    - else 
    = button_to 'Add Friend', friendships_path(:friend_id => user), :method => :post 
+0

Merci! Fonctionne très bien. Un commentaire mineur; le contenu if/else doit être changé. –

+1

Encore plus simple: 'current_user.friends.include? user' –

Questions connexes