Sometimes we want to use a where
query on a a collection of records returned which is not ActiveRecord::Relation
.Hence we get the above error as Where
clause is know to ActiveRecord
and not to Array
.
There is a precise solution for this by using Joins
.
EXAMPLE:-
Suppose i need to find all user profiles(UserProfile) which are active which is not a user(User) with an id=10.
UserProfiles.includes(:user=>:profile_pictures]).where(:active=>true).map(&:user).where.not(:id=>10)
So above query will fail after map
as map
will return an array
which will not work with where
clause.
But using joins,will make it work,
UserProfiles.includes(:user=>:profile_pictures]).where(:active=>true).joins(:user).where.not(:id=>10)
As joins
will output similar records like map
but they will be ActiveRecord
and not an Array
.