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