patternrubyrailsMinor
A conditional active record query
Viewed 0 times
recordqueryactiveconditional
Problem
I have a conditional active record query that checks to see if a relationship of type X exists (
I currently use an
Is there a more clever way to do this or is this kind of query acceptable?
.count > 0) where attribute x and attribute y match specific input or if they match when attribute x and attribute y are switched.I currently use an
|| operator with two long active record queries to cover both situations.def coach_of?(user)
if UserRelation.where(relation_type: 'coach-student').where(user_id: self.id).where(with_user_id: user.id).count > 0 ||
UserRelation.where(relation_type: 'coach-student').where(user_id: user.id).where(with_user_id: self.id).count > 0
true
else
false
end
endIs there a more clever way to do this or is this kind of query acceptable?
Solution
Some notes:
-
-
-
-
I don't understand why you have to check both ways, a "coach - student" relationship looks unidirectional.
Anyway, if you set up the
-
if boolean then true else false end -> boolean.-
UserRelation.where(user_id: self.id).where(with_user_id: user.id) -> UserRelation.where(user_id: self.id, with_user_id: user.id)-
active_record_collection.count > 0 -> active_record_collection.exists?-
I don't understand why you have to check both ways, a "coach - student" relationship looks unidirectional.
Anyway, if you set up the
coach_students association, you may write something like this:def coach_of?(user)
coach_students.where(with_user_id: user).exists? ||
user.coach_students.where(with_user_id: self).exists?
endCode Snippets
def coach_of?(user)
coach_students.where(with_user_id: user).exists? ||
user.coach_students.where(with_user_id: self).exists?
endContext
StackExchange Code Review Q#60472, answer score: 2
Revisions (0)
No revisions yet.