Guest User

Untitled

a guest
Jun 13th, 2012
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.93 KB | None | 0 0
  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
Advertisement
Add Comment
Please, Sign In to add comment