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.