Composing scopes is completely normal - they are clear, easy to test and
can serve as building blocks. What you need to keep in mind is to keep
For example, if you have an e-commerce site selling guitars and from the
data you see that high-end left-handed guitars are most often bough by
left-handed adults then you don’t want to litter the code with multiple
Person.male.adult.left_handed. This is an
detail. You should define a scope (or a class method)
Person.best_high_end_left_handed_buyers and define it to equal
Person.male.adult.left_handed. If requirements change at a later point
time you can just change the definition. (Alternatively you can define a
private method that returns the scope in your controller).
TL;DR: It’s normal to chain scopes but keep your code DRY and make your
code express your intent.
I help tech companies to scale Heroku-hosted Rails apps.
Free, biweekly scalability newsletter for SaaS CEOs