zgodnie z zapytaniem twoim scenariuszem jest wybranie tych wiadomości, w których albo user_one jest bieżącym użytkownikiem, albo user_two jest bieżącym użytkownikiem. więc zamiast skomplikowanych zapytań, możesz po prostu zrobić to
Message.where("messages.user_one = ? OR messages.user_two =?", current_user, current_user).order("m_id ASC").limit(20)
teraz dodać do niego szczegóły dla użytkownika. możesz przejrzeć wiadomości w widoku i pobrać użytkownika dla każdej wiadomości i wyświetlić go. lub możesz utworzyć tablicę skrótów i przywrócić ją do widoku.