Дата проверки не нулевая? (рельсы, арель)

Как вы проверяете в Rails3 (с Arel или без него), заполнена ли дата (например, не нулевая)? Я знаю, что вы можете сделать это, используя:

obj.where('PLANNED IS NOT NULL')

но возможно ли это без использования SQL?

// SQL 
SELECT * FROM projecttasks WHERE planned IS not null

Я пытался:

# all tasks which have a date
tasks = Projecttask.where(:planned => !nil)

or

# all task with no planned date (sql: is null)
Projecttask.where(:planned => nil)

Но это не работает. В общем, как вы можете сделать «где» для столбцов NULL и NON NULL.

Спасибо.


person Roger    schedule 01.05.2012    source источник
comment
возможный дубликат rail 3, где условие использует NOT NULL   -  person Holger Just    schedule 01.05.2012


Ответы (3)


Вы можете проверить этот аналогичный вопрос для ответа. Я предполагаю, что ответ Райана Бигга вам нужен.

Rails, где условие использует NOT NULL

person jalvarado    schedule 01.05.2012
comment
Спасибо! Итак, вы получаете: Projecttask.where(Projecttask.arel_table[:planned].not_eq(nil)).to_sql - person Roger; 01.05.2012

В рельсах 3: Projecttask.where('planned IS NOT NULL')

В Rails 4 появился новый метод where.not.

Projecttask.where.not(planned: nil)

User.where.not(name: nil)
# SELECT * FROM users WHERE name IS NOT NULL
person Thomas Klemm    schedule 07.11.2013

Я не очень хорошо разбираюсь в ActiveRecord, так как в основном использую Mongoid, но я думаю, что вы можете найти ответы здесь: http://guides.rubyonrails.org/active_record_querying.html#conditions

Я думаю, вам нужно использовать строковые условия, как в where("planned is not null")

person ksol    schedule 01.05.2012
comment
да, извините, я изменю свой вопрос, я хотел, чтобы это было без SQL (это в основном немного SQL, который вы вводите). - person Roger; 01.05.2012
comment
С тем, что я прочитал на странице руководства, я не вижу упоминания об этом, поэтому это может быть невозможно. - person ksol; 01.05.2012