relaciones rails proyecto modelos libro formularios español crear con ruby-on-rails ruby activerecord relation

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'')