2012-10-03 16 views
8

tengo el siguiente modelo en la aplicación rielesrieles cláusula where más de dos tablas

category => company => store 

tienda tiene una empresa belongs_to y la empresa tiene una relación belongs_to categoría. ahora quiero usar un método where en un objeto de la tienda para recuperar todas las tiendas dentro de la misma categoría.

me gustaría tener algo como esto

@stores.nearbys(5).where("stores.company.category_id = xxx") 

alguien me puede dar un consejo sobre este

+0

@simone gracias por poner de relieve el código !!! – Martin

Respuesta

17

Try une con el lugar donde en la tabla unida:

@stores.nearbys(5).joins(:company).where("companies.category_id = xxx") 

EDIT:

Para obtener la categoría de una tienda que primero tendrá que delegar el método de categoría a su compañía:

class Store < ActiveRecord::Base 
belongs_to :company 

delegate :category, :to => :company 
end 

Ahora acaba de llamar al método de la consulta:

@stores.nearbys(5).joins(:company).where("companies.category_id = ?", self.company.id) 
+0

¡excelente! solo una pregunta mas. ¿Cómo puedo reemplazar el xxx con la categoría real de la tienda, ya que también es accesible solo a través de la empresa relacionada? – Martin

+0

Edité mi respuesta - espero que sea más útil –

+0

gracias. resolvió mi problema junto con el blog de simone. todo lo mejor de austria – Martin

10

where apoya resumen anidada.

@stores.nearbys(5).where(:company => { :category_id => @category.id }, joins: company) 
+0

hola simone, con @ store.nearbys (5) .where (empresa: {category_id}, joins: company) recibo el siguiente error: error de sintaxis, inesperado '}', esperando tASSOC .... where (compañía: { category_id}, join: company) – Martin

+0

¿Quizás no estés usando Ruby 1.9? Actualicé para usar la sintaxis anterior. –

+0

Disculpe, se produjo un error. Olvidé que 'category_id' debe tener un valor, en este caso' @ category.id' (asegúrese de adaptar el código) –

-1

puede probar esta

@category = Category.find xxx 

@store = @category.company.stores 
+0

eso no es realmente una opción, ya que tengo un objeto de tienda existente y quiero obtener todas las tiendas que están en la misma categoría ... – Martin

+0

podemos tener otra relación si es posible como en las tiendas pertenece a: categoría,: a través =>: compañía –