À l'aide de caractère de point d'interrogation dans les Rails/ActiveRecord nom de la colonne
En accord avec Ruby est un langage de l'utilisation d'un point d'interrogation dans boolean méthodes (par exemple,person.is_smart?
), j'aimerais faire la même chose pour une ActiveRecord champ dans les Rails:
rails generate model Person is_smart?:boolean
Je n'ai pas d'exécuter l'instruction ci-dessus. Je suppose que les champs de base de données ne peut pas avoir un point d'interrogation en eux. Va rails de traiter de manière appropriée? La pratique est tout simplement de laisser la question des marques hors de modèles?
À L'Aide De Rails 3.2.8
- Pourquoi ne pas simplement appeler
smart
puis ajouter des accesseurs de sorte que vous pouvez direis_smart?
lorsque vous parlez à une Personne réelle? - Je suppose que ce qui fait le plus de sens, parce que c'est pas souvent que vous le nom d'une variable booléenne avec un point d'interrogation à la fin et on traite ci-dessus
is_smart?
comme une variable. - Rails est votre ami. Voir Cdesrosiers de réponse.
Vous devez vous connecter pour publier un commentaire.
Rails de générer automatiquement la méthode
smart?
si il y a un champ nommé'smart'
.?
méthodes pour toutes les colonnes. Ils semblent renvoyer true uniquement si la valeur est truthy. Donc, c'est un match parfait pour les booléens.present?
, pas truthy. Donc, "" renvoie la valeur false, par exemple.present?
github.com/rails/rails/blob/master/activerecord/lib/...Un "piège" pour être au courant de si vous arrive d'utiliser
:enum
dans votre modèle, car il stocke la valeur comme un nombre entier. Le point d'interrogation attr méthode prévue par l'enregistrement actif s'attend à évaluer 0 ou 1 comme faux /vrai respectivement dans la base de données. Par exemple:de voir comment cette méthode fonctionne, voir rails de source
En fait, la messagerie instantanée à l'aide de Rails 4 et je ne peux pas appeler ma colonne booléenne sans le point d'interrogation