我有一个Article
模型,其中包含approved?
布尔值和short_answer
文本列。
找到批准为false并且存在short_answer的文章的最佳方法是什么?
我知道您可以使用以下内容检查两个条件:
Article.where(:approved => false, :short_answer => "")
但不确定如何确保short_answer为present?
答案 0 :(得分:1)
试试这个(使用Rails 3.2或更高版本):
Article.where(approved: false).
where('aticles.short_answer IS NOT NULL')
或者这个(仅限ActiveRecord 4或更高版本):
Article.where(approved: false).
where.not(short_answer: nil)
答案 1 :(得分:1)
找到批准为假的文章的最佳方法是什么? short_answer存在吗?
您可以为个别条件编写scope,以便将来也可以重复使用。
class Article < ActiveRecord::Base
scope :all_approved, -> { where(approved: false) }
scope :all_short_answer, -> { where("articles.short_answer IS NOT NULL") }
end
Article.all_approved.all_short_answer
现在有多种方法可以使用where子句编写查询。我现在要分发给你,由你来订阅你想要的宗教信仰。
1。您可以在where
等子句中使用原始SQL查询scope :all_short_answer, -> { where("short_answer IS NOT NULL") }`
2. 可以将all_short_answer
范围重写为
scope :all_short_answer, -> { where(articles.short_answer != nil) }
3。可以使用where.not
scope :all_short_answer, -> { where.not('articles.short_answer' => nil) }
答案 2 :(得分:1)
@article = Article.where(approved: false).where.not(short_answer: nil).first
如果你想扩大范围:
#app/models/article.rb
class Article < ActiveRecord::Base
scope :approved_short_answer, -> { where(approved:false).where.not(short_answer: nil).first }
end
@article = Article.approved_short_answer
答案 3 :(得分:0)
如果字段为NULL 或包含空字符串(present?
),则Rails false
帮助程序返回""
。如果字符串包含一个或多个字符,则返回true
。因此,测试short_answer
是否为nil
是不够的。
所以,对于Rails 4.x:
Article.where(approved: false).where('length(short_answer) > 0')
答案 4 :(得分:0)
您想找到
的文章您可以通过ActiveRecord查询界面
进行操作Article
.where(approved: false)
.where.not(short_answer: nil)
.where.not(short_answer: "")
如果您可以保证short_answer
的所有非空值都包含文字,则可以简化此操作。
Article
.where(approved: false)
.where.not(short_answer: nil)