2010-06-24 10 views
52

Possible en double:
Naming Boolean columns in Railsrails champs booléens: `is_foo` ou juste` foo`?

Quelle est la convention des rails en ce qui concerne les noms des champs booléens?

Par exemple, si j'ai un modèle User qui a besoin d'un drapeau pour son « activeness », dois-je appeler le champ db is_active ou active?

Remarque: Rails génère automatiquement des méthodes marquées par une question pour l'accès aux champs booléens: User.is_active? et User.active?.

Répondre

59

La forme simple adjectif est facilement la norme dans Ruby et Rails - even?, nil?, empty? et blank? par exemple. La seule méthode de la forme is_#{something}? que je peux penser est Kernel#is_a? pour déterminer l'identité de classe. Donc, pour rester avec les conventions de nommage standard, je laisserais le is_ sur des méthodes booléennes comme celle-ci.

+0

merci j'apprécie votre commentaire. Cependant je crois que 'is_xxx' sera plus approprié pour mon application. J'ai couru jusqu'à un booléen appelé 'is_client'. Le remplacer par 'client' le fait ressembler à une association ActiveRecord (même si je n'ai pas de modèle Client sur ma conception ... pour l'instant). – kikito

+6

Je pense que ce à quoi Chuck a échappé ici est l'inclusion du point d'interrogation. Ce serait 'client?' (Y compris le point d'interrogation) pas 'client' ou' is_client'. Le préfixe 'is_' est pour les langues qui ne supportent pas l'ajout d'un point d'interrogation au nom. Pour le définir est simplement: 'def client? ... end' – PhilT

+4

Rails crée également des méthodes correspondantes pour les valeurs booléennes. Donc, si vous avez un champ appelé client qui est un booléen, alors Rails va créer une méthode sur ce modèle appelée 'client?' Qui vous permet de vérifier si elle est définie. – PhilT

7

Parmi les 2, vous devriez choisir celui qui sonne le mieux pour vous: User.active? ou User.is_active?

Je choisirais personnellement le premier.

Le point d'interrogation goody vient de Ruby, pas de Rails.

+0

Vous m'avez donné la solution à mon problème - j'ai fini par utiliser ce que je pensais être le plus correct ('is_client'). Chuck a cependant répondu à la question - Rails (et Ruby) semblent favoriser l'adjectif simple. Je partagerais la réponse entre vous deux si je pouvais. Je peux seulement vous donner un +1 et mes remerciements. Aussi, merci pour les pointeurs concernant le point d'interrogation - je ne savais pas que cela venait de ruby ​​lui-même. – kikito

+0

Je déteste vraiment les réponses «suivez votre cœur». Non-réponses, vraiment. – Arcolye

+1

Je choisis le plus tard que l'ancien. User.active pour moi pourrait être une portée nommée. Pour moi, il est juste plus clair que .Active est un scope et .is_active est un booléen. Oui, vous avez le? sur la méthode, mais: User.active, user.active?, user.is_active? - Le dernier est juste plus facile à reconnaître contextuellement, à mon humble avis. –