检查日期不为空? (rails,arel)

时间:2012-05-01 09:55:02

标签: ruby-on-rails-3 arel

如果填写日期(如,非空),如何检查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)

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

但这不起作用。一般来说,如何在NULL和NON NULL列上执行“where”。

感谢。

3 个答案:

答案 0 :(得分:11)

在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

答案 1 :(得分:2)

您可以查看此类似问题以获得答案。 Ryan Bigg的回答是我猜你正在寻找的。

Rails where condition using NOT NULL

答案 2 :(得分:0)

我不太熟悉ActiveRecord因为我主要使用Mongoid,但我认为你可以在这里找到你的答案:http://guides.rubyonrails.org/active_record_querying.html#conditions

我猜你必须使用字符串条件,如where("planned is not null")