Rails活动记录查询 - 不等于空白/空字符串

时间:2014-05-04 07:30:11

标签: sql ruby-on-rails activerecord ruby-on-rails-4

我有一个活动记录查询,其中包含字符串的Not Equal子句。例如:

 Post.where.not(title: "Rails 4")

 Post.where("title != ?", "Rails 4")

但是,如果标题为空或空白,则不会包含在结果中。 如何还包含空白或空标题的记录?

例如:

帖子

id => 1, title => "Rails 4"
id => 2, title => ""
id => 3, title => "Rails 3"

实际结果:

Post.where.not(title: "Rails 4") #=> [3]

期望的结果:

Post.where.not(title: "Rails 4") #=> [2, 3]

3 个答案:

答案 0 :(得分:4)

尝试以下查询

Post.where("title != ? OR title = ?", "Rails 4",'')

答案 1 :(得分:0)

您可以在此处手动键入SQL并可能创建数据库依赖项,或者将ActiveRecord与Arel结合使用,这样可读性稍差,但效果很好:

table = Post.arel_table

Post.where(table[:title].not_eq('Rails 4').or(table[:title].eq('')))

答案 2 :(得分:-1)

Pavans的回答是正确的,只需使用此

即可
Post.where("title != ? OR title = ?", "Rails 4",'')