Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Query records through its belongs_to relation in Rails

I have an Activities model, and they belong_to a Location

How do i select all the activities whose location.country = Australia? (for example)

Can I do this within a scope?

like image 391
Will Avatar asked Sep 02 '25 05:09

Will


1 Answers

With the latest rails versions you can do:

Activity.joins(:location).where(locations: { country: "Australia" })

Beware:

  • it is location (singular) in joins(:location) because it references the belongs_to relationship name
  • it is locations (plural) in where(…) because it references the table name

The latter means that if you had the following:

belongs_to :location, class_name: "PublicLocation"

the query would be:

 Activity.joins(:location).where(public_locations: { country: "Australia" })
like image 146
Arnaud Avatar answered Sep 04 '25 23:09

Arnaud