【发布时间】:2011-10-12 02:46:11
【问题描述】:
如何将以下内容转换为适用于 sqlite 和 mysql 的内容?注意,internal 可以为空。
scope :external, where("internal is not true")
(在 Rails 4 中,可以简单地使用:)
scope :external, where.not(internal: true)
【问题讨论】:
标签: ruby-on-rails arel
如何将以下内容转换为适用于 sqlite 和 mysql 的内容?注意,internal 可以为空。
scope :external, where("internal is not true")
(在 Rails 4 中,可以简单地使用:)
scope :external, where.not(internal: true)
【问题讨论】:
标签: ruby-on-rails arel
scope :external, where(internal: [false, nil])
这将被转换为类似的 SQL(可能带有表名和 quetes):
internal IN ('f') OR internal IS NULL
internal IN (0) OR internal IS NULL
scope :external,
where(arel_table[:internal].eq(false).or(arel_table[:internal].eq(nil)))
应该是:
internal = 'f' OR internal IS NULL
internal = 0 OR internal IS NULL
IS NULL 或 IS NOT NULL 表达式。表达式 ... <> NULL、... = NULL、... IN (NULL) 对于所有内容都被评估为 false。
所以,NULL <> NULL 为假,NUL = NULL 为假。
【讨论】:
尝试作用域:external, where('internal IN (?)', [false,nil])
【讨论】:
试试scope :external, where(:internal => !true)
【讨论】:
!true 将返回 false 并且它将仅返回 internal = false 值而不是空值。