J'ai du mal à voir facilement quels attributs/propriétés existent dans toutes mes classes de modèle car ils ne sont pas explicitement définis dans mes fichiers de classe.
Pour découvrir les attributs du modèle, je tiens le fichier schema.rb ouvert et je bascule entre celui-ci et le code que j'écris au besoin. Cela fonctionne, mais c'est maladroit parce que je dois basculer entre la lecture du fichier de schéma pour sélectionner les attributs, le fichier de classe de modèle pour vérifier les méthodes et le nouveau code que j'écris pour appeler attributs et méthodes.
Ma question est la suivante: comment découvrir les attributs de modèle lorsque vous analysez un Rails codebase pour la première fois? Gardez-vous le fichier schema.rb ouvert en permanence? Ou existe-t-il un meilleur manière qui n'implique pas de sauter constamment entre le fichier schéma et le fichier modèle?
Pour les trucs liés au schéma
Model.column_names
Model.columns_hash
Model.columns
Par exemple, variables/attributs dans un objet AR
object.attribute_names
object.attribute_present?
object.attributes
Par exemple, méthodes sans héritage de la super classe
Model.instance_methods(false)
Il y a un plugin Rails appelé Annotate models, qui générera les attributs de votre modèle au-dessus de vos fichiers de modèle. Voici le lien:
https://github.com/ctran/annotate_models
pour que l'annotation reste synchronisée, vous pouvez rédiger une tâche afin de générer à nouveau des modèles d'annotation après chaque déploiement.
Si vous ne vous intéressez qu'aux propriétés et aux types de données de la base de données, vous pouvez utiliser Model.inspect
.
irb(main):001:0> User.inspect
=> "User(id: integer, email: string, encrypted_password: string,
reset_password_token: string, reset_password_sent_at: datetime,
remember_created_at: datetime, sign_in_count: integer,
current_sign_in_at: datetime, last_sign_in_at: datetime,
current_sign_in_ip: string, last_sign_in_ip: string, created_at: datetime,
updated_at: datetime)"
Sinon, ayant exécuté rake db:create
et rake db:migrate
pour votre environnement de développement, le fichier db/schema.rb
contiendra la source faisant autorité pour la structure de votre base de données:
ActiveRecord::Schema.define(version: 20130712162401) do
create_table "users", force: true do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at"
t.datetime "updated_at"
end
end
Pour décrire le modèle que j'utilise dans l'extrait suivant
Model.columns.collect { |c| "#{c.name} (#{c.type})" }
Encore une fois, c’est si vous cherchez à décrire joliment votre description ActiveRecord
sans que vous ayez suivi des migrations ou sauté de ce développeur avant que vous n’ayez eu la gentillesse de commenter les attributs.
some_instance.attributes
Source: blog