On 09 Nov 2009, at 12:35, Joaquin Rivera Padron wrote:
> I have a method in a model that concatenates named_scopes at later
> points in the method if certain conditions given. The concatenations
> go ok when all that concatenation is done with named_scopes, but it
> blows when ActiveRecord.all is used in it
>
> see it in the gist: http://gist.github.com/229884
>
> I could of course write that in some other way, but the question
> would be: could AR.all be turned into a NamedScope and not an Array?
>
> any ideas? in the mean time I will refactor my code and make my
> specs happy :-)
Well, the implementation of AR.all is not a named_scope as you
obviously found out:
# This is an alias for find(:all). You can pass in all the
same arguments to this method as you can
# to find(:all)
def all(*args)
find(:all, *args)
end
A quick google search revealed this blog post:
http://www.neeraj.name/blog/articles/871-fixing-activerecord-base-all-and-making-it-friendlier-to-named_scope
It outlines both the problem and provides a solution. I do agree that
since AR is clearly pushing chained scopes as a way to build queries,
a named scope implementation would be better. But named scopes have
quite a bit of work ahead, since arguments don't get overridden if a
subsequent scope defines them differently etc. Example: if you
make :active => true the default scope and then make a named_scope
of :inactive, defined as :active => false, you'll get a contradictory
query.
On the other hand, Rails is open source and well thought out and
tested contributions do make it into the core, so it's only a matter
of someone stepping up to get it sorted. Other ORM options have
already tackled these problems more elegantly afaik, like Datamapper
and Arel.
Best regards
Peter De Berdt
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---