# Cleaning up a UGLY method

**URL:** <https://www.ruby-forum.com/t/cleaning-up-a-ugly-method/107596>\
**Category:** Rails\
**Created:** [June 23, 2007, 9:11pm UTC](https://www.ruby-forum.com/t/cleaning-up-a-ugly-method/107596 "2007-06-23T21:11:38Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![gnuvince](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/82dd89/32.png) [@gnuvince](https://www.ruby-forum.com/u/gnuvince)\
**Post date:** [June 23, 2007, 9:11pm UTC](https://www.ruby-forum.com/t/cleaning-up-a-ugly-method/107596/1 "2007-06-23T21:11:38Z")

</div>

I’ve been playing with a horrid method that I am using to sort my  
Projects by the average importance of their tasks. it hits the  
database quite a bit and is very ugly… does anyone have any  
suggestions? rails is still very new to me.

here is my method.

def self.list\_by\_priority  
priority = [5,4,3,2,1]  
sorted = Array.new  
priority.each do | current\_priority |  
find(:all).each do |project|  
sorted \<\< project if project.tasks.average(:priority) \>=  
current\_priority && sorted.include?(project) == false  
end  
end  
sorted  
end

---

<div class="post-metadata">

**Author:** ![gnuvince](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/82dd89/32.png) [@gnuvince](https://www.ruby-forum.com/u/gnuvince)\
**Post date:** [June 23, 2007, 9:52pm UTC](https://www.ruby-forum.com/t/cleaning-up-a-ugly-method/107596/2 "2007-06-23T21:52:42Z")

</div>

On Jun 23, 2007, at 2:10 PM, Vincent F. wrote:

> end  
> How about:

class \<\< self  
def list\_by\_priority  
find(:all, :include =\> :tasks).sort\_by { |project|  
project.tasks.average(:priority) }  
end  
end
