Правильный синтаксис для логического условия в find - PullRequest
3 голосов
/ 02 марта 2010

Я хочу найти пользователей, чей атрибут show имеет значение true.

show = true
@users = User.find(:all,
               :conditions => ["show = ?", show])

Мне кажется, это не работает.

Ответы [ 4 ]

5 голосов
/ 02 марта 2010

Ваш пример обязательно должен работать. Если вы используете старую версию rails, вам может потребоваться перезагрузить сервер.

Другой вариант - использовать синтаксис хеша, например ...

@users = User.find(:all, :conditions => {:show => true})

Тогда вы можете просто добавить свои другие условия в хэш.

3 голосов
/ 02 марта 2010

Попробуйте альтернативную версию запроса:

User.find_all_by_show(true)

Убедитесь, что в таблице users есть столбец tinyint(1) (т.е. boolean) с именем show.

Я видел это поведение раньше. Мне пришлось использовать 1 / 0 для true false для условий массива. Попробуйте это:

show = 1
@users = User.find(:all,
               :conditions => ["show = ?", show])
1 голос
/ 02 марта 2010

Синтаксис выглядит мне правильно.

Что показывает ваш файл development.log? Запрос SQL должен отображаться там как выполненный.

0 голосов
/ 02 марта 2010

какую базу данных вы используете? mysql или sqlite?

В MySQL логические значения хранятся как 1 и 0, и они отличаются от других баз данных, поэтому в вашей миграции вы указали значение по умолчанию: 1.

Пожалуйста, проверьте это снова и попробуйте снова.

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

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