прекратить подписку на пользователя, если он не подписан на сообщения пользователя - PullRequest
0 голосов
/ 29 января 2012

Я хочу прекратить подписку на пользователя, если и только если я ушел, чтобы подписаться на все его сообщения.

Для этого я пытался с этим методом, но у меня не работает.

user_with_posts = User.find(params[:id])
posts_of_users = user_with_posts.posts
posts_of_users.each do |post|
current_user.unfollow(user_with_posts) unless current_user.follows?(post)
end

Проблема здесь в том, что если user_with_post имеет 3 сообщения, а current_user следует только за 1 сообщением, код запускает current_user.unfollow (user_with_posts)

Я хочу только запустить ** current_user.unfollow (user_with_posts) тогда и только тогда, когда я оставил подписаться на все сообщения для user_with_posts

1 Ответ

1 голос
/ 30 января 2012

Вы можете использовать Enumerable # any? для этой цели:

любой? [{| OBJ | блок}] → true или false

Передает каждый элемент коллекции в данный блок. Метод возвращает true, если блок возвращает значение, отличное от false или ноль. Если блок не указан, Ruby добавляет неявный блок {| obj | obj} (что есть? вернет true, если хотя бы одна из коллекции члены не ложь или ноль.

user_with_posts = User.find(params[:id])
posts_of_users = user_with_posts.posts
current_user.unfollow(user_with_posts) unless posts_of_users.any? do |post|
  current_user.follows?(post)
end
...