Just found a nitfy plugin called AutoScope. It lets you define scopes for a model. For example:
class User < ActiveRecord::Base
auto_scope \
:fresh => {:find => {:conditions => ['activated_at IS NULL AND destroyed_at IS NULL']},
:active => {:find => {:conditions => ['activated_at IS NOT NULL AND destroyed_at IS NULL']}},
:archived => {:find => {:conditions => ['destroyed_at IS NOT NULL']}}
end
These set up some scoped methods
new_count = User.fresh.count
old_users = User.archived.find(:all)
User.fresh.find(:all).each {|u| u.update_attribute(:activated_at, Time.now.to_utc)}
I've found these great for filtering collection views that group users distinctly, but span across multiple columns.
def filter_users
return default_search unless params[:user_scope]
scope = params[:user_scope].to_sym
case scope
when :fresh, :active, :archived
# scopes we recognise
users = User.send(scope).find(:all)
else
users = User.find(:all)
end
users
end
Do note, though, to be careful what to name your scopes. I started out by calling my "fresh" scope "new". Unfortunately this overwrote the "new" function on my User model... not a Good Thing.
No comments:
Post a Comment