To edit pages or tickets please login with username/password: aaf/aaf

Changeset 203

Show
Ignore:
Timestamp:
07/13/07 21:13:22 (1 year ago)
Author:
jk
Message:

#143

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/demo/test/unit/comment_test.rb

    r195 r203  
    181181  end 
    182182 
     183  def test_array_conditions_combining  
     184    comments_from_ferret = Comment.find_by_contents('comment AND fixture', {}, :conditions => [ 'id IN (?)', [ 2, 3 ] ])  
     185    assert_equal 1, comments_from_ferret.size  
     186    assert_equal 1, comments_from_ferret.total_hits  
     187  end 
     188 
    183189end 
  • trunk/plugin/acts_as_ferret/lib/class_methods.rb

    r198 r203  
    218218        end 
    219219 
    220         # merge conditions 
    221         conditions = combine_conditions([ "#{model.table_name}.#{model.primary_key} in (?)",  
    222                                           id_array.keys ],  
    223                                         find_options[:conditions]) 
    224  
    225220        # check for include association that might only exist on some models in case of multi_search 
    226221        filtered_include_options = [] 
     
    233228 
    234229        # fetch 
    235         tmp_result = model.find(:all, find_options.merge(:conditions => conditions,  
    236                                                          :include=>filtered_include_options)) 
     230        tmp_result = nil 
     231        model.send(:with_scope, :find => find_options) do  
     232          tmp_result = model.find( :all, :conditions => [  
     233            "#{model.table_name}.#{model.primary_key} in (?)", id_array.keys ],   
     234            :include => filtered_include_options )  
     235        end 
     236 
    237237        # set scores and rank 
    238238        tmp_result.each do |record| 
     
    255255        begin 
    256256          model = model.constantize 
    257           # merge conditions 
    258           conditions = combine_conditions([ "#{model.table_name}.#{model.primary_key} in (?)", id_array.keys ],  
    259                                           find_options[:conditions]) 
    260           count += model.count(find_options.merge(:conditions => conditions)) 
     257          model.send(:with_scope, :find => find_options) do  
     258            count += model.count(:conditions => [ "#{model.table_name}.#{model.primary_key} in (?)", 
     259                                                  id_array.keys ])  
     260          end 
    261261        rescue TypeError 
    262262          raise "#{model} must use :store_class_name option if you want to use multi_search against it.\n#{$!}" 
     
    274274        logger.warn ":first_doc is deprecated, use :offset instead!" 
    275275        options[:offset] ||= options[:first_doc] 
    276       end 
    277     end 
    278  
    279     # combine our conditions with those given by user, if any 
    280     def combine_conditions(conditions, *additional_conditions) 
    281       returning conditions do 
    282         if additional_conditions.any? 
    283           cust_opts = additional_conditions.dup.flatten 
    284           conditions.first << " and " << cust_opts.shift 
    285           conditions.concat(cust_opts) 
    286         end 
    287276      end 
    288277    end 

To edit pages or tickets please login with username/password: aaf/aaf