ruby-on-rails - proyecto - relaciones ruby on rails
Consulta los registros a través de su relación por relación en Rails. (3)
Tengo un modelo de Actividades, y pertenecen a una Ubicación
¿Cómo selecciono todas las actividades cuyo location.country = Australia? (por ejemplo)
¿Puedo hacer esto dentro de un alcance?
Con las últimas versiones de rieles puedes hacer:
Activity.joins(:location).where(locations: { country: "Australia" })
Tener cuidado:
- es ubicación ( singular ) en
joins(:location)
porque es una relación correspondiente a - es ubicaciones ( plural ) en
where(…)
porque es el nombre de la tabla
Esto último significa que si tuvieras lo siguiente:
belongs_to :location, class_name: "PublicLocation"
La consulta sería:
Activity.joins(:location).where(public_locations: { country: "Australia" })
El tipo de consulta del que estás hablando es una combinación. Puedes intentar consultas como esta en la consola como:
Activity.joins(:locations).where(''locations.country = "Australia"'')
Esto significa que SQL tomará todas las actividades y ubicaciones asociadas con, luego buscará las ubicaciones donde país = Australia y luego le devolverá las actividades asociadas con esas ubicaciones.
Para convertir esto en un ámbito más reutilizable, defínalo en su modelo con una variable para el país:
scope :in_country, lambda {|country| joins(:locations).where(''locations.country = ?'',country)}
Puedes aprender más sobre esto en los documentos API .
Sí, se puede utilizar un alcance. Algo como esto debería funcionar en el modelo de Actividades:
scope :down_under,
joins(:locations).
where("locations.country = ''Australia'')