views:

35

answers:

2

I am trying to define two variables as follows:

  1. @orders = Customers.find_all_by_order_date(nil)
  2. @nonorders = Customers.find_all_by_order_date(!nil)

The first works properly but the second doesn't. How can I find those customers whose order_date fields are not nil?


@nonorders = @customer.orders.find(:all, :conditions => "@customer.orders.order_date IS NOT NULL")

is giving me the following error:

undefined method `extract_options_from_args!' for ActiveRecord::Base:Class

I've tried changing the conditions, such as @orders.order_date, @customer.order.order_date, etc. What's causing this error? Thank you!

+3  A: 

Rails3:

@nonorders = Customers.where("customers.date IS NOT NULL")

Rails2:

@nonorders = Customers.find(:all, :conditions => "customers.date IS NOT NULL")
Yannis
Hi Yannis, I've uploaded a follow-up question... still getting errors unfortunately.
sscirrus
or @nonorders = Customer.find(:all, :include => :orders, :conditions => ["orders.order_date IS NOT NULL AND customers.id = ?", @customer.id ])
Bohdan Pohorilets
+1  A: 

The string you pass as :conditions needs to be an sql fragment.

In the example given "customers.date" refers to the date field of the customers table. I think the "customers" bit is not strictly necessary, as the table name is clear from the context.

In your example the following should work:

@nonorders = @customer.orders.find(:all, :conditions => "order_date IS NOT NULL")
Tom Close