hi all, thanks for you reply, 2009/11/9 Peter De Berdt <[email protected]>
> > 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 > > Peter yep, nice post, only for the moment I don't feel like patching AR::Base, and I get lots of warnings when running my specs: /home/joahking/dev/rails/tucamon/app/models/group.rb:44: warning: multiple values for a block parameter (0 for 1) from /home/joahking/dev/rails/tucamon/vendor/rails/activerecord/lib/active_record/named_scope.rb:92 line 44: named_scope :all, lambda { |args| args ||= {} } I'll go with HeChian Hsu idea, it ended like this: gs = if PrivacyLevels.include? privacy self.send privacy else self # AR itself end if name gs.named_like name else gs.all # and all again end I know it's not a very general solution, but it keeps all them specs green :-) I have to move on given my deadlines, but if I stumble again I'll give a second thought thanks for your responses, joaquin 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 > > > > > -- www.least-significant-bit.com --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---

