Sometimes if I need to do a calculation before I call a named scope or if I 
want to make a different query based on the input, I do something like this:

class Media < AR:Base
  def dvds(name = "")
    if name.blank?
      Media.scoped({})
    else
      name.downcase!
      Media.scoped(:conditions => {:name => name})
    end
  end
end

In either case, it's still chainable. This is Rails2 code, but I'm sure you 
could do something similar with Rails3.

Luke

On 2010-10-08, at 2:25 PM, Frederick Cheung wrote:

> 
> 
> On Oct 8, 9:30 pm, Christian Fazzini <[email protected]>
> wrote:
>> If thats the case, when should one use a named scope over a method?
>> 
>> For example:
>> 
>> Product.find_by_category(category).
>> 
>> find_by_category can either be a named scope or a method in the
>> Product model. I was under the impression that named scopes cant
>> accept an attribute and this was the main difference. Apparently, it
>> can!
>> 
>> So when does one use named scopes over methods?
> 
> (Nitpicking: a call to named_scope (or scope in rails 3) does just
> define a method of a particular form)
> Scopes are chainable which can be very handy. On the other hand there
> is only so much a scope can do - scopes boil down to a single query to
> the database, so if you need to do more, then you'll probably want to
> wrap up the extra work in a method.
> 
> Fred
>> 
>> On Oct 9, 4:24 am, Marnen Laibow-Koser <[email protected]> wrote:
>> 
>> 
>> 
>>> Christian Fazzini wrote:
>>>> In my Video model i have:
>> 
>>>> class Video < Media
>>>>   scope :genre, where(['genres.name = ?',
>>>> params[:genre].capitalize]).includes({:artist => {:user => :genre}})
>>>>   ....
>>>> end
>> 
>>>> As you see above, params[:genre].capitalize is a dynamic value. How do
>>>> I pass a value when I call Video.genre?
>> 
>>>> Or are we not allowed to pass attributes/values to named scopes?
>> 
>>> Read the AR rdoc on named_scopes.  It explains this quite clearly.
>>> (Hint: lambdas are involved.)
>> 
>>> Best,
>>> --
>>> Marnen Laibow-Koserhttp://www.marnen.org
>>> [email protected]
>>> --
>>> Posted viahttp://www.ruby-forum.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.
> 

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