Changeset 203
- Timestamp:
- 07/13/07 21:13:22 (1 year ago)
- Files:
-
- trunk/demo/test/unit/comment_test.rb (modified) (1 diff)
- trunk/plugin/acts_as_ferret/lib/class_methods.rb (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/demo/test/unit/comment_test.rb
r195 r203 181 181 end 182 182 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 183 189 end trunk/plugin/acts_as_ferret/lib/class_methods.rb
r198 r203 218 218 end 219 219 220 # merge conditions221 conditions = combine_conditions([ "#{model.table_name}.#{model.primary_key} in (?)",222 id_array.keys ],223 find_options[:conditions])224 225 220 # check for include association that might only exist on some models in case of multi_search 226 221 filtered_include_options = [] … … 233 228 234 229 # 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 237 237 # set scores and rank 238 238 tmp_result.each do |record| … … 255 255 begin 256 256 model = model.constantize 257 # merge conditions258 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 261 261 rescue TypeError 262 262 raise "#{model} must use :store_class_name option if you want to use multi_search against it.\n#{$!}" … … 274 274 logger.warn ":first_doc is deprecated, use :offset instead!" 275 275 options[:offset] ||= options[:first_doc] 276 end277 end278 279 # combine our conditions with those given by user, if any280 def combine_conditions(conditions, *additional_conditions)281 returning conditions do282 if additional_conditions.any?283 cust_opts = additional_conditions.dup.flatten284 conditions.first << " and " << cust_opts.shift285 conditions.concat(cust_opts)286 end287 276 end 288 277 end
