Here’s the situation…
:customer has_many :billing_windows
:billing_window belongs_to :customer
A billing_window can either be open or closed (it is considered open
until its closed_on attribute is set to a datetime). I’m trying to
refactor the class method on Customer that finds all customers with at
least 1 open billing_window. Currently it looks like this…
def self.has_open_billing_window
set = []
Customer.find(:all).each do |customer|
set << customer if customer.billing_windows.find(:all, :conditions
=> [:open => true]).size > 0
end
set
end
For obvious reasons, this is horribly inefficient so I have refactored
that code to:
def self.has_open_billing_window
Customer.find(:all, :joins => :billing_windows, :conditions =>
“billing_windows.closed_on IS NULL”)
end
This definitely seems cleaner but I don’t like the fact that the
conditions clause is specific to the database query language. Does
anyone know a better way to accomplish this?
Bob