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