named_scope - поиск записей, где поле не является ни нулевым, ни пустым / пустым - PullRequest
0 голосов
/ 01 июля 2010

Я только хочу найти записи, которые не являются нулевыми или пустыми / пустыми, в настоящее время у меня есть;

named_scope :in_gallery, :conditions => ["gallery IS NOT NULL"]

(галерея - это строка), но если пользовательский ввод затем удаляет заголовок, тогда этопустая строка включена в результаты.

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

Ответы [ 3 ]

3 голосов
/ 01 июля 2010

А как же

named_scope :in_gallery, :conditions => ["gallery IS NOT NULL AND gallery != ''"]

?

2 голосов
/ 01 июля 2010

Я думаю, что названное определение области видимости J выглядит правильно, но помимо этого, я бы задал вопрос, почему вы используете как NULL, так и пустую строку для обозначения «не в галерее». Если у вас есть контроль над всеми вставками и обновлениями в этой базе данных, я бы порекомендовал выбрать одну или другую (мне кажется, NULL более естественным) и придерживаться ее. Это упростит ваш код в таких местах, как, например, эта именованная область, и разрешение обоих может привести к некоторым действительно раздражающим ошибкам, если вы забудете проверить одну или другую.

Простой способ реализовать это - добавить проверку, запрещающую установку галереи в пустую строку, а затем исправить все разрывы (надеюсь, у вас есть тесты). Если вы выставляете API и вам нужно разрешить пустые галереи для обратной совместимости, вы можете установить хук before_save, чтобы изменить пустую строку на nil.

0 голосов
/ 17 сентября 2013

Следующие покрытия не пустые и не пустые:

named_scope :in_gallery, :conditions => ["gallery <> ''"]

Или в рельсах 3+ вы можете сделать:

scope :in_gallery, where("gallery <> ''")
...