我有一个活动记录查询,其中包含字符串的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]
答案 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",'')