Carsten Gehling
2007-Jan-15 23:47 UTC
[Ferret-talk] Wrong total_hits when using conditions in find_by_contents
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.
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.
-----------------------------
Fix for this:
1) In the acts_as_ferret plugin, find the file class_methods.rb
2) Go to line 276 where you have this code-block
[code]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))
end[/code]
and add this line:
[code]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!!!
end[/code]
- Carsten
--
Posted via http://www.ruby-forum.com/.
Carsten Gehling
2007-Jan-15 23:48 UTC
[Ferret-talk] Wrong total_hits when using conditions in find_by_conten
Ah bloody hell... Sorry for the strange tags, I thought the forum supported BBCode... - Carsten -- Posted via http://www.ruby-forum.com/.
Jens Kraemer
2007-Jan-16 11:13 UTC
[Ferret-talk] Wrong total_hits when using conditions in find_by_contents
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 kraemer at webit.de Schnorrstra?e 76 Tel +49 351 46766 0 D-01069 Dresden Fax +49 351 46766 66
Jens Kraemer
2007-Jan-16 11:13 UTC
[Ferret-talk] Wrong total_hits when using conditions in find_by_conten
On Tue, Jan 16, 2007 at 12:48:07AM +0100, Carsten Gehling wrote:> Ah bloody hell... > > Sorry for the strange tags, I thought the forum supported BBCode...that''s because it''s a mailing list in the first place ;-) Jens -- webit! Gesellschaft f?r neue Medien mbH www.webit.de Dipl.-Wirtschaftsingenieur Jens Kr?mer kraemer at webit.de Schnorrstra?e 76 Tel +49 351 46766 0 D-01069 Dresden Fax +49 351 46766 66