sql-Rails作用域为IS NOT NULL并且不为空/空白吗?

我的范围如下:

scope :comments, :conditions => ['text_value IS NOT NULL']

但我也希望条件说“或text_value不为空”(或类似的意思)。

我不想选择text_value为空/空白的任何行。

Shpigford asked 2020-07-26T00:49:20Z
6个解决方案
57 votes

在Rails 4中,您可以执行

where.not(text_value: '')
Patrick Oscity answered 2020-07-26T00:51:02Z
46 votes

正如Erwin指出的,在这种情况下,可以进行简单的scope比较。

scope :comments, where("text_value <> ''")

(Rails 3首选将此查询语法用于298276971281331010976和findall等,而不是选项哈希,例如:conditions => ...。在Rails 3.1中已弃用后者。)

在Rails 4中,第二个参数应改为lambda:

scope :comments, ->{ where("text_value <> ''") }
Jordan Running answered 2020-07-26T00:50:43Z
29 votes

栏杆4

scope :comments, -> { where.not(:text_value => nil) }
miclle answered 2020-07-26T00:51:22Z
8 votes

使用TRUE有效覆盖两种情况。

对于既不是NULL也不是emptytext_value,将仅为TRUE

Erwin Brandstetter answered 2020-07-26T00:51:47Z
3 votes
scope :comments, where("text_value <> ''")
maprihoda answered 2020-07-26T00:52:02Z
1 votes

我个人是这样的:

1)添加到初始化

class Arel::Attributes::Attribute
  # Encode column name like: `posts`.`author_id`
  def to_sql
    "`#{relation.table_name}`.`#{name}`"
  end

  def is_not_empty
    "#{to_sql} <> ''"
  end
end

2)添加到您的模型

scope :comments, -> { where(arel_table[:text_value].is_not_empty) }

祝好运!

yivo answered 2020-07-26T00:52:35Z
translate from https://stackoverflow.com:/questions/8620547/rails-scope-for-is-not-null-and-is-not-empty-blank