43 votes

Portée de Rails pour IS NOT NULL et is not empty/blank ?

J'ai la portée suivante :

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

Mais je veux aussi que les conditions disent "OR text_value IS NOT EMPTY" (ou quelque chose de ce genre).

Je ne veux pas sélectionner de lignes où text_value est vide/blank.

59voto

p11y Points 14785

Dans Rails 4, vous pouvez faire

where.not(text_value: '')

47voto

Jordan Points 26741

Comme Erwin le souligne, un simple text_value <> '' La comparaison fonctionne dans ce cas.

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

(Rails 3 préfère cette syntaxe de requête pour scope -ainsi que find , all plutôt qu'un hachage d'options, par exemple. :conditions => ... . Ce dernier est déprécié dans Rails 3.1 .)

Dans Rails 4, le second argument devrait être un lambda à la place :

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

31voto

miclle Points 155

Rails 4

scope :comments, -> { where.not(:text_value => nil) }

9voto

Erwin Brandstetter Points 110228

Utilisez text_value <> '' pour couvrir efficacement les deux cas.

Seront seulement TRUE pour un text_value qui n'est ni NULL ni empty .

3voto

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X