2011-07-18 3 views
1

J'adore utiliser le? pour les champs booléens, par exemple, pour la table 'animaux' "vivant?" est très évident. Où puis-je définir ceci? Dois-je nommer le champ db lors de la création de la migration de la table (ne le pensez pas). Ou est-ce automatique pour les champs booléens ou ai-je une petite méthode dans la classe du modèle d'enregistrement actif pour les animaux qui dit quelque chose comme def vivant? si vivant alors vrai sinon faux fin?Ruby, utilisation de '?' - DB ou méthode de modèle?

Répondre

6

Rails génère automatiquement une méthode se terminant par ? pour chacun des champs d'un modèle. Quelques exemples:

Animal #=> Animal(id: integer, alive: boolean, name: string) 
a = Animal.new 

a.alive #=> nil 
a.alive? #=> false 
a.alive = true 
a.alive? #=> true 

a.name #=> nil 
a.name? #=> false 
a.name = "Giraffe" 
a.name? #=> true 

Notez également que vous pouvez facilement définir vos propres méthodes ?:

class Animal 
    def young? 
    created_at > 1.day.ago 
    end 
end 
1

Ce comportement est automatique pour tous les champs booléens dans ActiveRecord.

Comme une finesse, j'aime nommer les champs booléens avec un préfixe is_. is_alive, ce qui vous donne is_alive?.

+0

des normes agréables mais personnelles lors du partage de code sont un cauchemar pour tous à utiliser et à entretenir. –

+0

Emprunté directement à Ruby and Rails lui-même. 'is_a?', 'is_missing?', 'is_eos?', etc. –

+0

oui ils sont juste comme la méthode de ruby ​​nommage qui est super. Ils suivent les mêmes normes et le même format, ce qui est également génial. Je crois toujours cependant que: les normes personnelles lors du partage de code sont un cauchemar pour tout le monde à utiliser et à maintenir. S'il vous plaît méditer :) Si vous pouvez les obtenir dans le noyau de rubis pas de problème. –

Questions connexes