Named_scopes - any reason why you should not alway use a named scope (c.f. a custom method to return


#1

Hi,

I’ve just discovered the “named_scope” method which seems great. I’m
wondering there is any reason why you wouldn’t always use a named scope
(to
get the advantages), over a custom method on your model to return an
array
of records?

That is using:

class Shirt < ActiveRecord::Base
named_scope :red, :conditions => {:color => ‘red’}
end

instead of

class Shirt < ActiveRecord::Base
def red
Shirt.find_all_by_color(‘red’)
end
end

Comments?


Greg
http://blog.gregnet.org/


#2

Greg H. wrote:

Hi,

I’ve just discovered the “named_scope” method which seems great. I’m
wondering there is any reason why you wouldn’t always use a named scope
(to
get the advantages), over a custom method on your model to return an
array
of records?

That is using:

class Shirt < ActiveRecord::Base
named_scope :red, :conditions => {:color => ‘red’}
end

instead of

class Shirt < ActiveRecord::Base
def red
Shirt.find_all_by_color(‘red’)
end
end
Well, this second case is kind of redundant since you are effectively
creating two methods that do exactly the same thing. The defined method
“red” and the dynamically created method (via method_missing)
“find_all_by_color(‘red’)”

But, realizing this is a contrived example there are advantages to using
the named scopes because name scopes can be chained:
large_red_shirts = Shirt.large.red

At least as I understand named_scope.


#3

(bump)

On Tue, Jan 20, 2009 at 11:45 AM, Greg H. <
removed_email_address@domain.invalid> wrote:

named_scope :red, :conditions => {:color => 'red'}


Greg
http://blog.gregnet.org/


#4

On Tue, Jan 20, 2009 at 3:45 AM, Greg H. <
removed_email_address@domain.invalid> wrote:

named_scope :red, :conditions => {:color => 'red'}

The only reason to use a custom method instead of a named_scope is when
you’re doing more than querying the db or there’s something named_scopes
can’t handle.


Andrew T.
http://ramblingsonrails.com
http://www.linkedin.com/in/andrewtimberlake

“I have never let my schooling interfere with my education” - Mark Twain


#5

ok - so if you had the time, updating all your custom finder methods to
named_scope would give you more flexibility then. I was just wanting to
check if there were any negatives or gotchas to named_scope’s

On Wed, Jan 21, 2009 at 9:42 PM, Andrew T. <
removed_email_address@domain.invalid> wrote:

That is using:

Greg

Andrew T.
http://ramblingsonrails.com
http://www.linkedin.com/in/andrewtimberlake

“I have never let my schooling interfere with my education” - Mark Twain


Greg
http://blog.gregnet.org/


#6

On Wed, Jan 21, 2009 at 10:15 PM, Greg H. <
removed_email_address@domain.invalid> wrote:

ok - so if you had the time, updating all your custom finder methods to
named_scope would give you more flexibility then. I was just wanting to
check if there were any negatives or gotchas to named_scope’s

It would definitely give you more flexibility because of the ability to
chain together named_scopes.


Andrew T.
http://ramblingsonrails.com
http://www.linkedin.com/in/andrewtimberlake

“I have never let my schooling interfere with my education” - Mark Twain