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
-~----------~----~----~----~------~----~------~--~---

Reply via email to