you've defined a class level method. You're calling it on an instance of your class. This shouldn't even work.
say you've got a typo and it's actually defined as an instance method and you're trying current_user.best_friend, you're going to get an array of values returned. Of course the array has no 'interests' method, since that's defined in your user model. I think what you may want is something like the following:
def best_friend User.find :first, :conditions => ['designation = ?', 'Best Friend'] end
but.... looking back on your original method, it doesn't really make sense to me. You've got:
def self.best_friend find :all, :conditions => "designation = 'Best Friend'" end
so you want to find all the users who are designated as a 'Best Friend'. But a best friend to whom? Say you've got 10 users and each of them has 'Best Friend' set, so that means everyone is a best friend to everyone else, which is probably not what you want.
I think what you want is either a self referential join, so each user can have an arbitrary number of best friends, or give each user a 'best_friend_id' and use a has_one :best_friend, :class => 'User' association if you only want each user to have a single best friend.
Mike