[Ror-es] Busqueda con joins

Xavier Noria fxn at hashref.com
Tue Apr 24 09:32:44 GMT 2007


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

> 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?

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





More information about the Ror-es mailing list