Forum: Rails-ES Busqueda con joins

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Manuel Chacana L (Guest)
on 2007-04-24 03:02
(Received via mailing list)
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.
Xavier N. (Guest)
on 2007-04-24 13:33
(Received via mailing list)
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
Manuel Chacana L (Guest)
on 2007-04-24 21:20
(Received via mailing list)
Muchas gracias Xavier por la solución.

El día 24/04/07, Xavier N. <removed_email_address@domain.invalid> escribió:
This topic is locked and can not be replied to.