Найти все записи, у которых есть поле, отличное от нуля?

Я пытаюсь определить две переменные следующим образом:

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

Первый работает правильно, а второй нет. Как я могу найти тех клиентов, чьи поля order_date не равны нулю?


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

дает мне следующую ошибку:

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

Я пытался изменить условия, такие как @orders.order_date, @customer.order.order_date и т.д. Что вызвало эту ошибку? Спасибо!

Ответ 1

Rails3:

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

Rails2:

@nonorders = Customers.find(:all, :conditions => "customers.date IS NOT NULL")

Ответ 2

Строка, которую вы передаете как: условия должны быть фрагментом sql.

В приведенном ниже примере "clients.date" относится к полю даты таблицы клиентов. Я думаю, что бит "клиентов" не является абсолютно необходимым, так как имя таблицы ясно из контекста.

В вашем примере должно работать следующее:

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

Ответ 3

> Rails 3.x

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


Unless you are doing some non rails conventional stuff,
there should be no need to specify the table name within
the SQL payload of the the where method