Вы хотите найти всех пользователей, у которых есть все категории, которые есть у текущего пользователя, а затем собрать все категории, которые есть у других, за исключением категорий, которые есть у текущего пользователя.
Как насчет этого:
@user_group = User.find(:select => "count(likes) as count, users.*",
:joins => :likes,
:conditions => {:likes => {:category_id => current_user.categories.map(&:category_id).flatten}}
:group => "#{('users.id having count = ?', current_user.categories.count)}")
@categories = Categories.find(:joins => :likes, :conditions => ['likes.user_id in ? and id not in ?', @user_group.map(&:id), current_user.categories.map(&:id)]