Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 文章中布尔值为false且属性存在-Rails 4_Ruby On Rails_Ruby_Ruby On Rails 4_Activerecord - Fatal编程技术网

Ruby on rails 文章中布尔值为false且属性存在-Rails 4

Ruby on rails 文章中布尔值为false且属性存在-Rails 4,ruby-on-rails,ruby,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby,Ruby On Rails 4,Activerecord,我有一篇文章模型,带有批准?布尔值和简短回答文本列 如果approved为false且简短答案存在,那么找到文章的最佳方法是什么 我知道你可以用这样的方法检查两个条件: Article.where(:approved => false, :short_answer => "") 但是不确定如何确保简短的答案是存在的?试试这个(使用Rails 3.2或更高版本): 或此选项(仅适用于ActiveRecord 4或更高版本): 如果字段为NULL或包含空字符串(“”),Railspre

我有一篇
文章
模型,带有
批准?
布尔值和
简短回答
文本列

如果approved为false且简短答案存在,那么找到文章的最佳方法是什么

我知道你可以用这样的方法检查两个条件:

Article.where(:approved => false, :short_answer => "")
但是不确定如何确保简短的答案是
存在的?

试试这个(使用Rails 3.2或更高版本):

或此选项(仅适用于ActiveRecord 4或更高版本):


如果字段为NULL或包含空字符串(
”),Rails
present?
帮助程序将返回
false
。如果字符串包含一个或多个字符,则返回
true
。因此,仅测试
short\u answer
是否为
nil
是不够的

因此,对于Rails 4.x:

Article.where(approved: false).where('length(short_answer) > 0')
什么是最好的方法来找到一篇文章,其中批准是错误的和错误的 简短的答案是否存在

您可以针对个别情况编写代码,以便将来也可以重用

   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
2.可以将
所有简短的回答重写为

scope:all\u short\u answer,->{where(articles.short\u answer!=nil)}

3.可以使用


scope:all\u short\u-answer,->{where.not('articles.short\u-answer'=>nil)}
您想为其查找文章吗

  • 批准=错误
  • 简短的回答!=空的
  • 简短的回答!=“”(空字符串)
您可以通过ActiveRecord查询接口执行此操作

Article
  .where(approved: false)
  .where.not(short_answer: nil)
  .where.not(short_answer: "")
如果可以保证
short\u answer
的所有非空值都包含文本,则可以简化此操作

Article
  .where(approved: false)
  .where.not(short_answer: nil)
如果要确定其范围,请执行以下操作:

#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
#app/models/article.rb
类文章{where(approved:false).where.not(short_answer:nil).first}
结束
@article=article.approved\u简短\u答案

@Kathan让我们知道我们的答案是否适用于您?这是使用squel吗
scope:all_short\u answer,->{where{articles.short\u answer!=nil}}
@wizadofogz去喝咖啡,但不是。我说过了吗?你没说过斯奎尔。但是,您使用的语法对于开箱即用的ActiveRecord无效,我所熟悉的唯一一个gem支持与您显示的内容类似的东西是squel。这就是为什么我问这个问题。你能解释一下这是如何有效的语法吗<代码>其中{articles.short_answer!=nil}
这确实可以处理
NULL
和空字符串情况。但是,计算short_answer字段的长度似乎是不必要的,因为知道它不是空字符串和非空字符串就足够了,这样我们就可以知道您是否还有任何关于
Article
  .where(approved: false)
  .where.not(short_answer: nil)
  .where.not(short_answer: "")
Article
  .where(approved: false)
  .where.not(short_answer: nil)
@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