Hey, there!
I’m pretty new to Rails so this may be a really stupid question but, I
googled it and found just one specific reference
(Say no to chained scopes!).
In the application I’m working on there are some controller actions
chaining scopes like this:
@results = @person.male.adult.left_handed
Is it normal? There are best practices on chaining scopes like: you can
chain maximum 2 scopes?
Cheers!
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
your
code DRY.
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
male
left-handed adults then you don’t want to litter the code with multiple
occurrences of Person.male.adult.left_handed
. This is an
implementation
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
in
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.
Greg Navis
I help tech companies to scale Heroku-hosted Rails apps.
Free, biweekly scalability newsletter for SaaS CEOs
http://www.gregnavis.com/newsletter/
I think we’re missing DRY but this is the answer I was looking for!
Thanks,
Greg!
Em quinta-feira, 19 de maio de 2016 06:06:20 UTC-3, Greg Navis escreveu: