Область применения Rails для IS NOT NULL и не пуста / пуста? - PullRequest
43 голосов
/ 24 декабря 2011

У меня есть следующая область действия:

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

Но я также хочу, чтобы условия говорили: «ИЛИ text_value НЕ ПУСТО» (или что-то в этом роде).

Я не знаюЯ не хочу выбирать строки, где text_value пусто / пусто.

Ответы [ 6 ]

56 голосов
/ 20 мая 2014

В Rails 4 вы можете сделать

where.not(text_value: '')
45 голосов
/ 24 декабря 2011

Как указывает Эрвин, в этом случае будет работать простое сравнение text_value <> ''.

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

(Rails 3 предпочитает этот синтаксис запроса для scope, а также find, all и т. д., а не хэш опций, например :conditions => .... Последний в * Rail * устарел в Rails 3.1 )1013 *

scope :comments, ->{ where("text_value <> ''") }
29 голосов
/ 19 ноября 2013

рельсы 4

scope :comments, -> { where.not(:text_value => nil) }
8 голосов
/ 24 декабря 2011

Используйте text_value <> '' для эффективного покрытия обоих дел.

Будет TRUE только для text_value, который не является ни NULL, ни empty.

3 голосов
/ 24 декабря 2011
scope :comments, where("text_value <> ''")
1 голос
/ 12 августа 2016

Лично я делаю так:

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) }

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...