Come scopri gli attributi del modello in Rails?


142

Sto trovando difficile vedere quali attributi / proprietà esistono su tutte le mie classi di modello poiché non sono esplicitamente definiti nei miei file di classe.

Per scoprire gli attributi del modello, tengo aperto il file schema.rb e lo sfoglio tra il codice che sto scrivendo e il necessario. Funziona ma è ingombrante perché devo passare dalla lettura del file dello schema per raccogliere gli attributi, al file della classe del modello per verificare i metodi e qualsiasi nuovo codice che sto scrivendo per chiamare attributi e metodi.

La mia domanda è: come scopri gli attributi del modello quando analizzi una base di codice Rails per la prima volta? Tieni il file schema.rb sempre aperto o esiste un modo migliore che non comporta il salto continuo tra il file schema e il file modello?


7
Grazie per le risposte di seguito. Sembra che non ci sia un buon modo per dichiarare i nomi degli attributi nel file sorgente del modello, ma piuttosto tenere un terminale aperto e colpire gli oggetti per scoprire le loro proprietà.
gbc,

Risposte:


276

Per cose relative allo schema

Model.column_names         
Model.columns_hash         
Model.columns 

Ad esempio variabili / attributi in un oggetto AR

object.attribute_names                    
object.attribute_present?          
object.attributes

Ad esempio metodi senza eredità da superclasse

Model.instance_methods(false)

10
Per ottenere anche le associazioni puoi fare: Model.reflect_on_all_associations.map (&: nome)
vasilakisfil,

1
In ActiveRecord 5 (e probabilmente in precedenza) puoi chiamare Model.attribute_names.
aceofbassgreg,


15

Se sei solo interessato alle proprietà e ai tipi di dati dal database, puoi usare 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)"

In alternativa, dopo aver eseguito rake db:createe rake db:migrateper l'ambiente di sviluppo, il file db/schema.rbconterrà l'origine autorevole per la struttura del database:

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

10

Per descrivere il modello utilizzo il seguente frammento

Model.columns.collect { |c| "#{c.name} (#{c.type})" }

Ancora una volta questo è se stai cercando una stampa carina per descriverti ActiveRecordsenza passare attraverso le migrazioni o saltare lo sviluppatore prima che tu fossi abbastanza gentile da commentare gli attributi.


Questo è perfetto per stampare tutti gli attributi di tutte le istanze per un modello particolare - grazie!
ConorB,

4
some_instance.attributes

Fonte: blog


some_class.attributes.keys è un po 'più pulito
klochner il

ti chiedi se qualche IDE lo utilizza per il completamento automatico? Sembra una cosa ovvia da fare per un modello di binari. Sono sempre deluso quando inizio a digitare un nome di attributo e non si completa automaticamente.
frankodwyer,

2
@frankodwyer - RubyMine lo fa, anche se sono sicuro che ce ne devono essere altri.
Matt
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.