Hi!

On Tue, Jan 16, 2007 at 12:47:17AM +0100, Carsten Gehling wrote:
> I don't know if this is a bug, or wanted behavior, but for me it was a
> pain in... So here's the problem + a bugfix.

right, that's a bug. I just committed a less invasive fix that will only
set total_hits to the Active Record result set size if the user gave any 
active record conditions with his queries (see below).

But please keep in mind that total_hits still may be wrong under certain
circumstances - e.g. if you specify the :num_docs ferret option and some
active record conditions further limiting the result set.

> Lets say you have a model "Article" with the following fields: title,
> visible - and these records
> 
> [code]title, visible
> ferret talk, 1
> ruby talk, 0
> ruby on rails, 1
> lets talk about ruby, 1[/code]
> 
> If I let Article act as a ferret, and do:
> 
> result = Article.find_by_content('ruby')
> 
> Result will contain 3 items and "total_hits" will return 3
> 
> However, if I add a condition:
> result = Article.find_by_content('ruby', {}, 'visible = 1')
> Result will contain 2 items - which is correct
> 
> But "hotal_hits" will still return 3 - not what I would expect.

> 
> if results.any?
>    conditions = combine_conditions([ "#{table_name}.#{primary_key} in
> (?)", results.keys ],
>    find_options[:conditions])
>    result = self.find(:all,
>    find_options.merge(:conditions => conditions))
>    total_hits = result.length   <===== ADD THIS!!!

even better, add

    total_hits = result.length if find_options[:conditions]

so total_hits stays correct if you use any ferret options like :num_docs
instead of AR conditions to limit the result set.

cheers,
Jens

-- 
webit! Gesellschaft für neue Medien mbH          www.webit.de
Dipl.-Wirtschaftsingenieur Jens Krämer       [EMAIL PROTECTED]
Schnorrstraße 76                         Tel +49 351 46766  0
D-01069 Dresden                          Fax +49 351 46766 66
_______________________________________________
Ferret-talk mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ferret-talk

Reply via email to