2012-05-01 16 views
1

如果填入日期(如in,not null),您如何檢查Rails3(帶或不帶Arel)?我知道你可以使用它:查看日期不爲空? (rails,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) 

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

但是,這並不工作。一般來說,如何在NULL和NON NULL列上執行'where'操作。

謝謝。

+0

的可能重複的[軌3,其中使用NOT NULL條件](http://stackoverflow.com/questions/4252349/rail-3-where-condition-using-not-null) –

回答

1

你可以檢查這個類似的問題的答案。 Ryan Bigg的回答是我猜你正在尋找的東西。

Rails where condition using NOT NULL

+1

那就是,謝謝!所以你得到:Projecttask.where(Projecttask.arel_table [:計劃] .not_eq(nil))。to_sql – Roger

0

我不是很流利的ActiveRecord的,因爲我一直都用Mongoid,但我認爲你可以在這裏找到答案:http://guides.rubyonrails.org/active_record_querying.html#conditions

我想你必須使用字符串的條件,如where("planned is not null")

+0

耶對不起,我改變我的問題,我希望沒有SQL方式(這基本上是你注入的一些SQL)。 – Roger

+0

隨着我在指南頁面閱讀的內容,我沒有看到任何提及,所以它可能不可能。 – ksol

+0

是的,我希望AREL可能會讓你,但我什麼也沒有看到...... – Roger

10

在Rails 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 
+0

這應該被標記爲答案 –