web-dev-qa-db-fra.com

Comment découvrir les attributs de modèle dans Rails?

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?

133
gbc

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)
264
penger

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.

25
ez.

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
12
Nick

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.

9
Haris Krajina
some_instance.attributes

Source: blog

4
mcandre