О методах запроса Условия в Rails 3 - PullRequest
0 голосов
/ 06 декабря 2010

Хэш-способ работает просто отлично:

drummers = Drummer.where(:gender => true)

=> [#<Drummer id: 1, first_name: "Bernard", middle_name: nil, second_name: "Purdie", nick_name: "Pretty Purdie", gender: true, created_at: "2010-12-05 02:47:56", updated_at: "2010-12-05 02:50:42">]

Но то же самое в строковом виде:

drummers = Drummer.where("gender = true")

Я получил ошибку ниже: A ctiveRecord :: StatementInvalid: SQLite3 :: SQLException: такого столбца нет: TRUE: ВЫБРАТЬ «барабанщиков». * ОТ «барабанщиков» ГДЕ (пол = ИСТИНА)

Кто-нибудь может мне сказать, почему?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2010

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

Если вы присоединяетесь к таблице, которая также содержит поле с именем «пол», то это будет нарушено, потому что это неоднозначно. Использование where(:gender => true) автоматически назначит вам пространство имен, так что этого не произойдет.

Как показывает ваш пример, использование строк также может создать проблемы переносимости, если вы используете функцию, которую ваш бэкэнд не поддерживает.

Я использовал плагин MetaWhere для расширения синтаксиса ARel, что делает строки менее необходимыми.

0 голосов
/ 06 декабря 2010

Это ошибка sqlite, а не rails. Когда вы говорите gender = true, он ищет столбец с именем true. В Sqlite нет логических значений, поэтому правильный способ сделать это - Drummer.where("gender = 1").

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