is there a better way to do this search?

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

Bob wrote: [...]

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.

The clause isn't specific to the DB query language. It contains only standard SQL, and so should work perfectly in any SQL database.

Granted, it won't necessary work in a non-SQL database, but those are typically structured very differently from SQL databases anyway.

Does anyone know a better way to accomplish this?

You don't need one.

Bob

Best,