Liam Morley
2008-Jan-03 19:53 UTC
[Ferret-talk] Problem (with fix?) for passing :multi => [ ]
Max, seems to me that your code would help to make things more robust, if it''s a public API then it should stand up to a little abuse in ways not intended. maybe more of an enhancement than a bug fix, but a fix just the same. Max Williams wrote:> I''m using acts_as_ferret, passing through multiple classes using :multi > and also some conditions. The way i''m doing this, which seems a bit > dirty (but it''s the only way i can work out) is to call find_by_contents > on the first element in an array of classes (called ''classes'' here), and > then point :multi at the rest of the array of classes: > > @search_results = classes.first.find_by_contents(@search.term, > #(ferret) options > {:page => (params[:page] || 1), > :per_page => 10, > :multi => classes.slice(1, classes.length) }, > #find_options > {:conditions => ["id = ?", 99]} > ) > > However, if classes has only one class in it, then :multi points to an > empty array, which seems to confuse the find_by_contents method - for > example, when doing a search on a single class, with a condition that > should return 1 result, ''total_hits'' equals 1 but @search_results is > empty. > > Following the code through method calls in the class_methods file in > acts_as_ferret, it seems that having a value for :multi but not having > any classes in it causes some confusion. > > To get around this, i added the following line at the start of the > find_with_ferret method (which is an alias for find_by_contents) - > > options.delete :multi if options[:multi] == [] > > This removes the confusion and everything''s fine as far as i can tell. > My question is this - should what i''ve done be considered a bug fix for > find_with_ferret, or is the fault mine for sometimes pointing :multi at > an empty array in my call?-- Posted via http://www.ruby-forum.com/.