Tester la valeur d'un champ booléen en base de données avec Ruby on Rails et SQLite
:boolean
dans vos modèles), vous constaterez peut-être qu'une requête comme celle-ci :articles = Article.all(:conditions => 'active = 1')
...ne fonctionne pas comme vous l'attendiez. En effet, dans un tel environnement, les valeurs booléennes ne sont pas stockées en tant que
TINYINT
prenant 0
ou 1
comme valeur, mais plutôt comme VARCHAR(1)
contenant 't'
ou 'f'
.Vous pouvez bien sûr simplement modifier votre requête "en dur", mais cela ne vous garantit pas un fonctionnement correct indépendamment du SGBD utilisé (et il y a fort à parier que SQLite ne fera plus partie du paysage une fois en production).
Dans ce cas, il est préférable de passer directement la valeur booléenne attendue, et de laisser Rails se charger de la préparation de la requête :
Article.all(:conditions => ['active = :active', { :active => true }])
Ainsi, vous pouvez même utiliser une variable ou le retour d'une fonction de manière plus directe !