如何将以下内容转换为适用于sqlite和mysql的内容?请注意,internal
可以为空。
scope :external, where("internal is not true")
(在Rails 4中,人们可以简单地使用:)
scope :external, where.not(internal: true)
答案 0 :(得分:4)
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
为false,NUL = NULL
为false。
答案 1 :(得分:1)
尝试范围:外部,其中('内部IN(?)',[false,nil])
答案 2 :(得分:-1)
尝试scope :external, where(:internal => !true)