Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Find all records that have a non-nil field?

I am trying to define two variables as follows:

  1. @orders = Customer.find_all_by_order_date(nil)
  2. @nonorders = Customer.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!

like image 633
sscirrus Avatar asked Sep 29 '10 19:09

sscirrus


2 Answers

Rails3:

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

Rails2:

@nonorders = Customers.find(:all, :conditions => "customers.date IS NOT NULL")
like image 129
Yannis Avatar answered Oct 17 '22 03:10

Yannis


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")
like image 22
Tom Close Avatar answered Oct 17 '22 03:10

Tom Close