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

Changeset 291

Show
Ignore:
Timestamp:
12/16/07 20:27:54 (10 months ago)
Author:
jk
Message:

allow for per-model conditions in multi_search

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/plugin/acts_as_ferret/lib/class_methods.rb

    r289 r291  
    369369      id_arrays.each do |model, id_array| 
    370370        next if id_array.empty? 
    371         begin 
    372           model = model.constantize 
     371        model_class = begin 
     372          model.constantize 
    373373        rescue 
    374374          raise "Please use ':store_class_name => true' if you want to use multi_search.\n#{$!}" 
    375375        end 
    376376 
     377        # check for per-model conditions and take these if provided 
     378        if conditions = find_options[:conditions] 
     379          key = model.underscore.to_sym 
     380          conditions = conditions[key] if Hash === conditions 
     381        end 
     382 
    377383        # merge conditions 
    378         conditions = combine_conditions([ "#{model.table_name}.#{model.primary_key} in (?)",  
     384        conditions = combine_conditions([ "#{model_class.table_name}.#{model_class.primary_key} in (?)",  
    379385                                          id_array.keys ],  
    380                                         find_options[:conditions]) 
     386                                        conditions) 
     387 
    381388 
    382389        # check for include association that might only exist on some models in case of multi_search 
     
    385392          include_options = [ include_options ] unless include_options.respond_to?(:each) 
    386393          include_options.each do |include_option| 
    387             filtered_include_options << include_option if model.reflections.has_key?(include_option.is_a?(Hash) ? include_option.keys[0].to_sym : include_option.to_sym) 
     394            filtered_include_options << include_option if model_class.reflections.has_key?(include_option.is_a?(Hash) ? include_option.keys[0].to_sym : include_option.to_sym) 
    388395          end 
    389396        end 
     
    391398 
    392399        # fetch 
    393         tmp_result = model.find(:all, find_options.merge(:conditions => conditions,  
    394                                                          :include => filtered_include_options)) 
     400        tmp_result = model_class.find(:all, find_options.merge(:conditions => conditions,  
     401                                                               :include    => filtered_include_options)) 
    395402 
    396403        # set scores and rank 

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