Busqueda con joins


#1

Saludos a todos.

Primero dar gracias por todas las ideas y soluciones expuestas.

Ahora mi problema, tengo un modelo de esta forma

class Grupos< ActiveRecord::Base

has_many :usuarios

end

class Usuarios< ActiveRecord::Base

belongs_to :grupo

end

Donde Grupos tiene un nombre, descripción y otras cosas mas, por la
parte de
los usuarios tienen nombre, apellido, interés, etc.

y tengo que hacer una consulta que me entregue una “lista de grupos” que
contenga X palabra y que algún usuario se llame Y

como puedo hacer esa consulta?

Trate de hacerlo con ferret pero no encontré como decirle que busque de
esa
forma.

De antemano Gracias.


#2

On Apr 24, 2007, at 1:00 AM, Manuel Chacana L wrote:

y tengo que hacer una consulta que me entregue una “lista de
grupos” que contenga X palabra y que algún usuario se llame Y

como puedo hacer esa consulta?

Escribirias algo asi:

Grupos.find(
:all,
:include => :usuarios,
:conditions => [<<-SQL, param1, param2, …]
grupos.nombre LIKE ? AND
grupos.descripcion LIKE ? AND
… AND
usuarios.nombre = ? OR
usuarios.apellido = ?
SQL
)

Lo clave es el :include y el usar el nombre de las tablas en las
condiciones.

Trate de hacerlo con ferret pero no encontré como decirle que
busque de esa forma.

Segun suelen recomendar en la lista de ferret, para poder buscar con
joins en ferret hay que indexar la join “plana”, es decir, debes
saber de antemano que necesitaras buscar de esa manera y guardar para
cada grupo el nombre y apellidos de todos sus integrantes. Asi, cada
grupo en vez de generar una tupla en ferret genera tantas como
usuarios distintos tiene.

– fxn


#3

Muchas gracias Xavier por la solución.

El día 24/04/07, Xavier N. removed_email_address@domain.invalid escribió: