Base de datos de Rails Búsqueda anidada Confusión

Estoy haciendo una búsqueda anidada, y, aunque siempre devuelve la información correcta, devuelve tres copys de cada input.

Quiero search a mis usuarios en function de su nombre de usuario, su primer nombre, un hobby o un tipo de pasatime. Cada usuario tiene cero, uno o muchos pasatimes.

Esta es mi consulta:

def self.search(search) query = "%#{search}%" if search joins(:hobbies) .where("user_name like ? or first_name like ? or hobbies.name like ? or hobbies.type like ?", query, query, query, query) else self.all end end 

Si busco por nombre de afición o tipo de hobby, obtengo la respuesta correcta.

¡¡Pero si busco por nombre de usuario o nombre, obtengo tres clones de la misma input !! ¿¿Porque hace eso??

Deberías usar includes lugar de joins .

includes hace un LEFT OUTER JOIN mientras que joins hace un INNER JOIN .