Thanks, Daniel.

On Thu, Jun 2, 2011 at 3:03 PM, Daniel M <[email protected]> wrote:

> Hobo-0.8.5
> Rails 2.2.2
>
>
> Im not an example...
>
>
> On Jun 1, 1:34 pm, Walter Davis <[email protected]> wrote:
> > What version of Rails?
> >
> > Walter
> >
> > On Jun 1, 2011, at 6:41 AM, Daniel M wrote:
> >
> >
> >
> > > I have Ruport with Hobo working ok.
> >
> > > It´s great.
> >
> > > On 31 Maio, 20:20, Matt Jones <[email protected]> wrote:
> > >> On May 31, 2011, at 8:01 AM, Owen wrote:
> >
> > >>> Has any one in the group tried Ruport?
> >
> > >>>http://www.rubyreports.org/
> >
> > >> Not with Hobo, but I used it for an extranet project a while back.
> > >> Overall, the formatting options were nice - but the grouping and
> > >> summary stuff didn't play well with the way my tables were
> > >> organized (also not helped by hitting some ActiveRecord bugs).
> >
> > >> Regarding the original question:
> >
> > >>> So what I figured out is I need to create named_scope.
> > >>> To generate report that shows all calls from users within last
> > >>> quarter I do:
> > >>> named_scope :show_calls, :from => "(select *, (select count(*)
> > >>> from calls where user_id=users.id and created_at >= '" +
> > >>> (Date.commercial(Date.today.year, Date.today.cweek, 1) - 11 *
> > >>> 7).strftime("%Y-%m-%d") + "' and result != 'nocall') as total_calls
> > >>> from users) users", :conditions => "total_calls > 0"
> >
> > >> Couple notes on this:
> >
> > >> - doing the date calculation as written above will result in weird
> > >> behavior in production; the scope gets defined *once* (at class-
> > >> load time) and the dates won't update after that. It's a sneaky
> > >> bug, totally unobservable in development mode (where the class gets
> > >> reloaded every request). You'll want to pass a lambda instead to
> > >> get the correct behavior.
> >
> > >> - passing a lambda also allows you to build scopes with arguments;
> > >> check the AR docs for details.
> >
> > >> - you may want to consider flipping the way some of these queries
> > >> are structured; for instance, transforming the above into a count
> > >> query on the Call model might make more sense:
> >
> > >> results_hash = Call.this_quarter.successful.count(:group
> > >> => :user_id, :having => 'count_all > 0')
> >
> > >> scopes on Call:
> >
> > >> named_scope :this_quarter, lambda { :conditions => ['created_at
> > >> >= ?', (Time.now.beginning_of_week - 11.weeks).to_date] }
> > >> named_scope :successful, :conditions => ['result != ?', 'nocall']
> >
> > >> The result of this will be a hash user_id => count of calls. If you
> > >> really want user objects, it's easy enough to do that:
> >
> > >> users = User.find(results_hash.keys)
> > >> users_hash = users.inject({}) { |h, user| h[user.id] = user; h }
> > >> users_results_hash = result_hash.inject({}) { |h, v|
> > >> h[users_hash[v[0]]] = v[1]; h }
> >
> > >> (that may be missing a to_i, depending on your database adapter -
> > >> some will coerce the :user_id groups to integers while others
> > >> return strings)
> >
> > >> Hope this helps!
> >
> > >> --Matt Jones
> >
> > > --
> > > You received this message because you are subscribed to the Google
> > > Groups "Hobo Users" 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 athttp://
> groups.google.com/group/hobousers?hl=en
>  > > .
>
> --
> You received this message because you are subscribed to the Google Groups
> "Hobo Users" 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/hobousers?hl=en.
>
>


-- 
Owen Dall, Chief Systems Architect
Barquin International
www.barquin.com
Cell: 410-991-0811

-- 
You received this message because you are subscribed to the Google Groups "Hobo 
Users" 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/hobousers?hl=en.

Reply via email to