2010-11-13 3 views
0

Я работаю над приложением Rails, где у меня есть пользователи, которые могут добавлять друг друга в качестве друзей. Теперь я пытаюсь отобразить определенную информацию, когда пользователь уже является другом другого пользователя. Я сделал это следующим образом:Найти совпадение из массива

- @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 

Я думаю, что это решение не приятно. Вы знаете, как я могу сделать это чистым и более эффективным способом?

ответ

2

Использовать Перечислимый # какой-либо? метод для этого

- @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 

Как пояснить в комментарии, Включить # включить? также работает в этом случае

- @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

Спасибо! Прекрасно работает. Один незначительный комментарий; содержимое if/else должно быть переключено. –

+1

Еще проще: 'current_user.friends.include? user' –

Смежные вопросы