【问题标题】:Check date is not null ? (rails, arel)检查日期不为空? (导轨,arel)
【发布时间】:2012-05-10 21:15:54
【问题描述】:

如果填写了日期(如 in,不为 null),您如何签入 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 列上执行“位置”。

谢谢。

【问题讨论】:

标签: ruby-on-rails-3 arel


【解决方案1】:

在 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

【讨论】:

    【解决方案2】:

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

    Rails where condition using NOT NULL

    【讨论】:

    • 就是这样,谢谢!所以你得到: Projecttask.where(Projecttask.arel_table[:planned].not_eq(nil)).to_sql
    【解决方案3】:

    由于我主要使用 Mongoid,所以我对 ActiveRecord 不是很流利,但我认为您可以在这里找到答案:http://guides.rubyonrails.org/active_record_querying.html#conditions

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

    【讨论】:

    • 是的,对不起,我会改变我的问题,我想要它没有 SQL 方式(这基本上是你注入的一点 SQL)。
    • 根据我在指南页面中阅读的内容,我没有看到任何提及它,所以它可能是不可能的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 2018-10-02
    • 1970-01-01
    • 2013-05-09
    相关资源
    最近更新 更多