Maybe the title is confusing, but I didn’t know how to explain my doubt.
Say I have the following class methods that will be helpful in order to do chainings to query a model called Player. A Player belongs_to a User, but if I want to fetch Players from a particular village or city, I have to fetch the User model.
def self.by_village(village)
joins(:user).where(:village => "village")
end
def self.by_city(city)
joins(:user).where(:city => "city")
end
Let’s say I want to fetch a Player by village but also by city, so I would do…
Player.by_city(city).by_village(village).
This would be doing a join of the User twice, and I don’t think that is correct.. Right?
So my question is: What would be the correct way of doing so?
I haven’t tried that, but I would judge the answer to your question by the actual sql query ActiveRecord generates. If it does only one join, I would use it as you did, if this results in two joins you could create a method by_village_and_city.
OK. Tried it now:
So, ActiveRecors combines the two queries, does the right thing and I would use it, except:
I had to change your implementation though:
and what you’re doing is usually handled with parameterized scopes: