Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 13th, 2012  |  syntax: None  |  size: 0.93 KB  |  hits: 13  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. How do I modify Rails ActiveRecord query results before returning?
  2. MyModel.some_custom_scope.some_other_scope.enhance_with_external_data.each do |object|
  3.   puts object.some_attribute_from_external_data_source
  4. end
  5.        
  6. def self.enhance_with_external_data
  7.   external_data = get_external_data
  8.   Enumerator.new do |yielder|
  9.     # mimick some stuff I saw in ActiveRecord and don't quite understand:
  10.     relation.to_a.each do |obj|
  11.       update_obj_with_external_data(obj)
  12.       yielder.yield(obj)
  13.     end
  14.   end
  15. end
  16.        
  17. MyModel.some_custom_scope.some_other_scope.enhance_with_external_data
  18.        
  19. def self.merge_with_extra_info
  20.   the_scope = scoped
  21.   class << the_scope
  22.     alias :base_to_a :to_a
  23.     def to_a
  24.       MyModel.enhance(base_to_a)
  25.     end
  26.   end
  27.   the_scope
  28. end
  29.  
  30. def self.enhance(items)
  31.   items.each do |item|
  32.     item = add_extra_item_info(item)
  33.   end
  34.   items
  35. end
  36.        
  37. MyModel.where(:some_attribute => some_value).merge_with_extra_info.limit(10).all