Найти все записи, которые имеют ненулевое поле? - PullRequest
10 голосов
/ 29 сентября 2010

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

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

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


@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 и т. д. В чем причина этой ошибки?Спасибо!

Ответы [ 3 ]

21 голосов
/ 29 сентября 2010

Rails3:

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

Rails2:

@nonorders = Customers.find(:all, :conditions => "customers.date IS NOT NULL")
1 голос
/ 30 сентября 2010

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

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

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

@nonorders = @customer.orders.find(:all, :conditions => "order_date IS NOT NULL")
0 голосов
/ 16 декабря 2018

> Рельсы 3.x

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

<sub>
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 <i>where</i> method
</sub>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...